diff --git a/AssetFile b/AssetFile index b5728ab0..fa696200 100644 --- a/AssetFile +++ b/AssetFile @@ -3,6 +3,9 @@ # http://blog.nulayer.com/post/23294069876/building-simple-javascript-libraries-with-rake-pipeline?15bb0420 require 'rake-pipeline-web-filters' +require 'compass' + +Compass.configuration.images_path = 'assets/images' output 'public/javascripts' input 'assets/javascripts' do @@ -15,12 +18,14 @@ input 'assets/javascripts' do vendor/ember-data.js vendor/ansiparse.js vendor/i18n.js + vendor/facebox.js vendor/jquery.timeago.js + vendor/sc-routes.js ) concat files, 'vendor.js' end - match '{app,config,lib}/**/*.coffee' do + match '{app,config,data,lib}/**/*.coffee' do coffee_script end @@ -33,16 +38,12 @@ input 'assets/javascripts' do concat 'app/templates.js' end - match 'mocks.js' do - concat 'mocks.js' - end - - match '{app,config,lib}/**/*.js' do + match '{app,config,data,lib}/**/*.js' do minispade( string: true, rewrite_requires: true, module_id_generator: proc { |input| - input.path.sub(%r(^(app|config|lib)/), '').sub(/\.js$/, '') + input.path.sub(%r(^(app|lib)/), '').sub(/\.js$/, '') } ) concat 'application.js' @@ -69,20 +70,29 @@ end output 'public/stylesheets' input 'assets/stylesheets' do - match '**/*.scss' do - filter(Rake::Pipeline::Web::Filters::TiltFilter) do |input| - input.sub /\.scss$/, 'css' - end + match '**/*.{scss,sass}' do + # filter(Rake::Pipeline::Web::Filters::TiltFilter) do |input| + # input.sub /\.scss$/, '.css' + # end + filter Rake::Pipeline::Web::Filters::SassFilter end match '**/*.css' do + concat 'application.css' + end +end + +output 'public/images' +input 'assets/images' do + match '**/*' do + copy + end +end + +output 'public' +input 'assets/static' do + match '**/*' do copy end end -# output 'public' -# input 'assets', 'index.html.erb' do -# filter(Rake::Pipeline::Web::Filters::TiltFilter) do |input| -# input.sub /\\.erb$/, '' -# end -# end diff --git a/Gemfile b/Gemfile index 21da4b16..a083db65 100644 --- a/Gemfile +++ b/Gemfile @@ -8,6 +8,7 @@ group :assets do gem 'rake-pipeline-web-filters', github: 'wycats/rake-pipeline-web-filters' gem 'coffee-script' + gem 'compass' gem 'tilt' gem 'guard' end diff --git a/Gemfile.lock b/Gemfile.lock index b07f2acb..cfd7c7a2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,13 +17,19 @@ GIT GEM remote: http://rubygems.org/ specs: + chunky_png (1.2.5) coffee-script (2.2.0) coffee-script-source execjs coffee-script-source (1.3.3) + compass (0.12.2) + chunky_png (~> 1.2) + fssm (>= 0.2.7) + sass (~> 3.1) execjs (1.4.0) multi_json (~> 1.0) ffi (1.0.11) + fssm (0.2.9) guard (1.1.1) listen (>= 0.4.2) thor (>= 0.14.6) @@ -43,6 +49,7 @@ GEM rb-fsevent (0.9.1) rb-inotify (0.8.8) ffi (>= 0.5.0) + sass (3.1.19) sinatra (1.3.2) rack (~> 1.3, >= 1.3.6) rack-protection (~> 1.2) @@ -59,6 +66,7 @@ PLATFORMS DEPENDENCIES coffee-script + compass guard rake-pipeline! rake-pipeline-web-filters! diff --git a/assets/images/emoji/-1.png b/assets/images/emoji/-1.png new file mode 100644 index 00000000..6f757ba8 Binary files /dev/null and b/assets/images/emoji/-1.png differ diff --git a/assets/images/emoji/0.png b/assets/images/emoji/0.png new file mode 100644 index 00000000..65146943 Binary files /dev/null and b/assets/images/emoji/0.png differ diff --git a/assets/images/emoji/1.png b/assets/images/emoji/1.png new file mode 100644 index 00000000..d9ee9e36 Binary files /dev/null and b/assets/images/emoji/1.png differ diff --git a/assets/images/emoji/109.png b/assets/images/emoji/109.png new file mode 100644 index 00000000..9c3512f2 Binary files /dev/null and b/assets/images/emoji/109.png differ diff --git a/assets/images/emoji/2.png b/assets/images/emoji/2.png new file mode 100644 index 00000000..670b9904 Binary files /dev/null and b/assets/images/emoji/2.png differ diff --git a/assets/images/emoji/3.png b/assets/images/emoji/3.png new file mode 100644 index 00000000..4884ee22 Binary files /dev/null and b/assets/images/emoji/3.png differ diff --git a/assets/images/emoji/4.png b/assets/images/emoji/4.png new file mode 100644 index 00000000..9023a2cf Binary files /dev/null and b/assets/images/emoji/4.png differ diff --git a/assets/images/emoji/5.png b/assets/images/emoji/5.png new file mode 100644 index 00000000..0bd3dad8 Binary files /dev/null and b/assets/images/emoji/5.png differ diff --git a/assets/images/emoji/6.png b/assets/images/emoji/6.png new file mode 100644 index 00000000..62012079 Binary files /dev/null and b/assets/images/emoji/6.png differ diff --git a/assets/images/emoji/7.png b/assets/images/emoji/7.png new file mode 100644 index 00000000..f510edd6 Binary files /dev/null and b/assets/images/emoji/7.png differ diff --git a/assets/images/emoji/8.png b/assets/images/emoji/8.png new file mode 100644 index 00000000..c9996021 Binary files /dev/null and b/assets/images/emoji/8.png differ diff --git a/assets/images/emoji/8ball.png b/assets/images/emoji/8ball.png new file mode 100644 index 00000000..74db01b7 Binary files /dev/null and b/assets/images/emoji/8ball.png differ diff --git a/assets/images/emoji/9.png b/assets/images/emoji/9.png new file mode 100644 index 00000000..a340a91a Binary files /dev/null and b/assets/images/emoji/9.png differ diff --git a/assets/images/emoji/a.png b/assets/images/emoji/a.png new file mode 100644 index 00000000..989e3e4b Binary files /dev/null and b/assets/images/emoji/a.png differ diff --git a/assets/images/emoji/ab.png b/assets/images/emoji/ab.png new file mode 100644 index 00000000..8ae786c1 Binary files /dev/null and b/assets/images/emoji/ab.png differ diff --git a/assets/images/emoji/airplane.png b/assets/images/emoji/airplane.png new file mode 100644 index 00000000..a6adc588 Binary files /dev/null and b/assets/images/emoji/airplane.png differ diff --git a/assets/images/emoji/alien.png b/assets/images/emoji/alien.png new file mode 100644 index 00000000..141e2fbf Binary files /dev/null and b/assets/images/emoji/alien.png differ diff --git a/assets/images/emoji/ambulance.png b/assets/images/emoji/ambulance.png new file mode 100644 index 00000000..9fe869fc Binary files /dev/null and b/assets/images/emoji/ambulance.png differ diff --git a/assets/images/emoji/angel.png b/assets/images/emoji/angel.png new file mode 100644 index 00000000..d57c86ab Binary files /dev/null and b/assets/images/emoji/angel.png differ diff --git a/assets/images/emoji/anger.png b/assets/images/emoji/anger.png new file mode 100644 index 00000000..c9245ca7 Binary files /dev/null and b/assets/images/emoji/anger.png differ diff --git a/assets/images/emoji/angry.png b/assets/images/emoji/angry.png new file mode 100644 index 00000000..3c8e8920 Binary files /dev/null and b/assets/images/emoji/angry.png differ diff --git a/assets/images/emoji/apple.png b/assets/images/emoji/apple.png new file mode 100644 index 00000000..4137b45a Binary files /dev/null and b/assets/images/emoji/apple.png differ diff --git a/assets/images/emoji/aquarius.png b/assets/images/emoji/aquarius.png new file mode 100644 index 00000000..49ce4316 Binary files /dev/null and b/assets/images/emoji/aquarius.png differ diff --git a/assets/images/emoji/aries.png b/assets/images/emoji/aries.png new file mode 100644 index 00000000..05835de5 Binary files /dev/null and b/assets/images/emoji/aries.png differ diff --git a/assets/images/emoji/arrow_backward.png b/assets/images/emoji/arrow_backward.png new file mode 100644 index 00000000..9ad1296e Binary files /dev/null and b/assets/images/emoji/arrow_backward.png differ diff --git a/assets/images/emoji/arrow_down.png b/assets/images/emoji/arrow_down.png new file mode 100644 index 00000000..3f9258d8 Binary files /dev/null and b/assets/images/emoji/arrow_down.png differ diff --git a/assets/images/emoji/arrow_forward.png b/assets/images/emoji/arrow_forward.png new file mode 100644 index 00000000..200a6447 Binary files /dev/null and b/assets/images/emoji/arrow_forward.png differ diff --git a/assets/images/emoji/arrow_left.png b/assets/images/emoji/arrow_left.png new file mode 100644 index 00000000..59be8e30 Binary files /dev/null and b/assets/images/emoji/arrow_left.png differ diff --git a/assets/images/emoji/arrow_lower_left.png b/assets/images/emoji/arrow_lower_left.png new file mode 100644 index 00000000..7cc33a31 Binary files /dev/null and b/assets/images/emoji/arrow_lower_left.png differ diff --git a/assets/images/emoji/arrow_lower_right.png b/assets/images/emoji/arrow_lower_right.png new file mode 100644 index 00000000..67d1c281 Binary files /dev/null and b/assets/images/emoji/arrow_lower_right.png differ diff --git a/assets/images/emoji/arrow_right.png b/assets/images/emoji/arrow_right.png new file mode 100644 index 00000000..99ae84e6 Binary files /dev/null and b/assets/images/emoji/arrow_right.png differ diff --git a/assets/images/emoji/arrow_up.png b/assets/images/emoji/arrow_up.png new file mode 100644 index 00000000..fd80ace4 Binary files /dev/null and b/assets/images/emoji/arrow_up.png differ diff --git a/assets/images/emoji/arrow_upper_left.png b/assets/images/emoji/arrow_upper_left.png new file mode 100644 index 00000000..52b9b39f Binary files /dev/null and b/assets/images/emoji/arrow_upper_left.png differ diff --git a/assets/images/emoji/arrow_upper_right.png b/assets/images/emoji/arrow_upper_right.png new file mode 100644 index 00000000..e8370c8a Binary files /dev/null and b/assets/images/emoji/arrow_upper_right.png differ diff --git a/assets/images/emoji/art.png b/assets/images/emoji/art.png new file mode 100644 index 00000000..109f664f Binary files /dev/null and b/assets/images/emoji/art.png differ diff --git a/assets/images/emoji/astonished.png b/assets/images/emoji/astonished.png new file mode 100644 index 00000000..052dfdbf Binary files /dev/null and b/assets/images/emoji/astonished.png differ diff --git a/assets/images/emoji/atm.png b/assets/images/emoji/atm.png new file mode 100644 index 00000000..357caf4d Binary files /dev/null and b/assets/images/emoji/atm.png differ diff --git a/assets/images/emoji/b.png b/assets/images/emoji/b.png new file mode 100644 index 00000000..dab96329 Binary files /dev/null and b/assets/images/emoji/b.png differ diff --git a/assets/images/emoji/baby.png b/assets/images/emoji/baby.png new file mode 100644 index 00000000..25b4d645 Binary files /dev/null and b/assets/images/emoji/baby.png differ diff --git a/assets/images/emoji/baby_chick.png b/assets/images/emoji/baby_chick.png new file mode 100644 index 00000000..9551846a Binary files /dev/null and b/assets/images/emoji/baby_chick.png differ diff --git a/assets/images/emoji/baby_symbol.png b/assets/images/emoji/baby_symbol.png new file mode 100644 index 00000000..149dabf2 Binary files /dev/null and b/assets/images/emoji/baby_symbol.png differ diff --git a/assets/images/emoji/balloon.png b/assets/images/emoji/balloon.png new file mode 100644 index 00000000..9f0cbd76 Binary files /dev/null and b/assets/images/emoji/balloon.png differ diff --git a/assets/images/emoji/bamboo.png b/assets/images/emoji/bamboo.png new file mode 100644 index 00000000..fe642bfc Binary files /dev/null and b/assets/images/emoji/bamboo.png differ diff --git a/assets/images/emoji/bank.png b/assets/images/emoji/bank.png new file mode 100644 index 00000000..74402657 Binary files /dev/null and b/assets/images/emoji/bank.png differ diff --git a/assets/images/emoji/barber.png b/assets/images/emoji/barber.png new file mode 100644 index 00000000..6081b417 Binary files /dev/null and b/assets/images/emoji/barber.png differ diff --git a/assets/images/emoji/baseball.png b/assets/images/emoji/baseball.png new file mode 100644 index 00000000..39b29b37 Binary files /dev/null and b/assets/images/emoji/baseball.png differ diff --git a/assets/images/emoji/basketball.png b/assets/images/emoji/basketball.png new file mode 100644 index 00000000..0c4f880b Binary files /dev/null and b/assets/images/emoji/basketball.png differ diff --git a/assets/images/emoji/bath.png b/assets/images/emoji/bath.png new file mode 100644 index 00000000..9672442c Binary files /dev/null and b/assets/images/emoji/bath.png differ diff --git a/assets/images/emoji/bear.png b/assets/images/emoji/bear.png new file mode 100644 index 00000000..d01c4ce3 Binary files /dev/null and b/assets/images/emoji/bear.png differ diff --git a/assets/images/emoji/beer.png b/assets/images/emoji/beer.png new file mode 100644 index 00000000..da1e34ab Binary files /dev/null and b/assets/images/emoji/beer.png differ diff --git a/assets/images/emoji/beers.png b/assets/images/emoji/beers.png new file mode 100644 index 00000000..c6e2d638 Binary files /dev/null and b/assets/images/emoji/beers.png differ diff --git a/assets/images/emoji/beginner.png b/assets/images/emoji/beginner.png new file mode 100644 index 00000000..784a81e1 Binary files /dev/null and b/assets/images/emoji/beginner.png differ diff --git a/assets/images/emoji/bell.png b/assets/images/emoji/bell.png new file mode 100644 index 00000000..df5d66ab Binary files /dev/null and b/assets/images/emoji/bell.png differ diff --git a/assets/images/emoji/bento.png b/assets/images/emoji/bento.png new file mode 100644 index 00000000..a66a2f5f Binary files /dev/null and b/assets/images/emoji/bento.png differ diff --git a/assets/images/emoji/bike.png b/assets/images/emoji/bike.png new file mode 100644 index 00000000..36bc09ba Binary files /dev/null and b/assets/images/emoji/bike.png differ diff --git a/assets/images/emoji/bikini.png b/assets/images/emoji/bikini.png new file mode 100644 index 00000000..e62cf066 Binary files /dev/null and b/assets/images/emoji/bikini.png differ diff --git a/assets/images/emoji/bird.png b/assets/images/emoji/bird.png new file mode 100644 index 00000000..88e5786a Binary files /dev/null and b/assets/images/emoji/bird.png differ diff --git a/assets/images/emoji/birthday.png b/assets/images/emoji/birthday.png new file mode 100644 index 00000000..5b2c28c0 Binary files /dev/null and b/assets/images/emoji/birthday.png differ diff --git a/assets/images/emoji/black_square.png b/assets/images/emoji/black_square.png new file mode 100644 index 00000000..dcd4ca95 Binary files /dev/null and b/assets/images/emoji/black_square.png differ diff --git a/assets/images/emoji/blue_car.png b/assets/images/emoji/blue_car.png new file mode 100644 index 00000000..badd22ea Binary files /dev/null and b/assets/images/emoji/blue_car.png differ diff --git a/assets/images/emoji/blue_heart.png b/assets/images/emoji/blue_heart.png new file mode 100644 index 00000000..a8105782 Binary files /dev/null and b/assets/images/emoji/blue_heart.png differ diff --git a/assets/images/emoji/blush.png b/assets/images/emoji/blush.png new file mode 100644 index 00000000..0b2628e9 Binary files /dev/null and b/assets/images/emoji/blush.png differ diff --git a/assets/images/emoji/boar.png b/assets/images/emoji/boar.png new file mode 100644 index 00000000..2bd9362f Binary files /dev/null and b/assets/images/emoji/boar.png differ diff --git a/assets/images/emoji/boat.png b/assets/images/emoji/boat.png new file mode 100644 index 00000000..8084f0e5 Binary files /dev/null and b/assets/images/emoji/boat.png differ diff --git a/assets/images/emoji/bomb.png b/assets/images/emoji/bomb.png new file mode 100644 index 00000000..322a3f1b Binary files /dev/null and b/assets/images/emoji/bomb.png differ diff --git a/assets/images/emoji/book.png b/assets/images/emoji/book.png new file mode 100644 index 00000000..3fa6b7c2 Binary files /dev/null and b/assets/images/emoji/book.png differ diff --git a/assets/images/emoji/boot.png b/assets/images/emoji/boot.png new file mode 100644 index 00000000..fd52cafa Binary files /dev/null and b/assets/images/emoji/boot.png differ diff --git a/assets/images/emoji/bouquet.png b/assets/images/emoji/bouquet.png new file mode 100644 index 00000000..791bfe86 Binary files /dev/null and b/assets/images/emoji/bouquet.png differ diff --git a/assets/images/emoji/bow.png b/assets/images/emoji/bow.png new file mode 100644 index 00000000..87c85122 Binary files /dev/null and b/assets/images/emoji/bow.png differ diff --git a/assets/images/emoji/bowtie.png b/assets/images/emoji/bowtie.png new file mode 100644 index 00000000..86550b32 Binary files /dev/null and b/assets/images/emoji/bowtie.png differ diff --git a/assets/images/emoji/boy.png b/assets/images/emoji/boy.png new file mode 100644 index 00000000..584bb395 Binary files /dev/null and b/assets/images/emoji/boy.png differ diff --git a/assets/images/emoji/bread.png b/assets/images/emoji/bread.png new file mode 100644 index 00000000..934bb3c5 Binary files /dev/null and b/assets/images/emoji/bread.png differ diff --git a/assets/images/emoji/briefcase.png b/assets/images/emoji/briefcase.png new file mode 100644 index 00000000..3491b84d Binary files /dev/null and b/assets/images/emoji/briefcase.png differ diff --git a/assets/images/emoji/broken_heart.png b/assets/images/emoji/broken_heart.png new file mode 100644 index 00000000..cc70df0c Binary files /dev/null and b/assets/images/emoji/broken_heart.png differ diff --git a/assets/images/emoji/bug.png b/assets/images/emoji/bug.png new file mode 100644 index 00000000..2230749e Binary files /dev/null and b/assets/images/emoji/bug.png differ diff --git a/assets/images/emoji/bulb.png b/assets/images/emoji/bulb.png new file mode 100644 index 00000000..02638b30 Binary files /dev/null and b/assets/images/emoji/bulb.png differ diff --git a/assets/images/emoji/bullettrain_front.png b/assets/images/emoji/bullettrain_front.png new file mode 100644 index 00000000..c64c517c Binary files /dev/null and b/assets/images/emoji/bullettrain_front.png differ diff --git a/assets/images/emoji/bullettrain_side.png b/assets/images/emoji/bullettrain_side.png new file mode 100644 index 00000000..39499c1e Binary files /dev/null and b/assets/images/emoji/bullettrain_side.png differ diff --git a/assets/images/emoji/bus.png b/assets/images/emoji/bus.png new file mode 100644 index 00000000..7014c9ae Binary files /dev/null and b/assets/images/emoji/bus.png differ diff --git a/assets/images/emoji/busstop.png b/assets/images/emoji/busstop.png new file mode 100644 index 00000000..c806a037 Binary files /dev/null and b/assets/images/emoji/busstop.png differ diff --git a/assets/images/emoji/cactus.png b/assets/images/emoji/cactus.png new file mode 100644 index 00000000..fb8eb2de Binary files /dev/null and b/assets/images/emoji/cactus.png differ diff --git a/assets/images/emoji/cake.png b/assets/images/emoji/cake.png new file mode 100644 index 00000000..80b9e654 Binary files /dev/null and b/assets/images/emoji/cake.png differ diff --git a/assets/images/emoji/calling.png b/assets/images/emoji/calling.png new file mode 100644 index 00000000..4309feb5 Binary files /dev/null and b/assets/images/emoji/calling.png differ diff --git a/assets/images/emoji/camel.png b/assets/images/emoji/camel.png new file mode 100644 index 00000000..5d022a41 Binary files /dev/null and b/assets/images/emoji/camel.png differ diff --git a/assets/images/emoji/camera.png b/assets/images/emoji/camera.png new file mode 100644 index 00000000..9909c287 Binary files /dev/null and b/assets/images/emoji/camera.png differ diff --git a/assets/images/emoji/cancer.png b/assets/images/emoji/cancer.png new file mode 100644 index 00000000..e0c95e8c Binary files /dev/null and b/assets/images/emoji/cancer.png differ diff --git a/assets/images/emoji/capricorn.png b/assets/images/emoji/capricorn.png new file mode 100644 index 00000000..6c73c8e3 Binary files /dev/null and b/assets/images/emoji/capricorn.png differ diff --git a/assets/images/emoji/car.png b/assets/images/emoji/car.png new file mode 100644 index 00000000..c8bc8020 Binary files /dev/null and b/assets/images/emoji/car.png differ diff --git a/assets/images/emoji/cat.png b/assets/images/emoji/cat.png new file mode 100644 index 00000000..31631e59 Binary files /dev/null and b/assets/images/emoji/cat.png differ diff --git a/assets/images/emoji/cd.png b/assets/images/emoji/cd.png new file mode 100644 index 00000000..9dec2a4b Binary files /dev/null and b/assets/images/emoji/cd.png differ diff --git a/assets/images/emoji/chart.png b/assets/images/emoji/chart.png new file mode 100644 index 00000000..14853baf Binary files /dev/null and b/assets/images/emoji/chart.png differ diff --git a/assets/images/emoji/checkered_flag.png b/assets/images/emoji/checkered_flag.png new file mode 100644 index 00000000..f65aa36c Binary files /dev/null and b/assets/images/emoji/checkered_flag.png differ diff --git a/assets/images/emoji/cherry_blossom.png b/assets/images/emoji/cherry_blossom.png new file mode 100644 index 00000000..2d7612c2 Binary files /dev/null and b/assets/images/emoji/cherry_blossom.png differ diff --git a/assets/images/emoji/chicken.png b/assets/images/emoji/chicken.png new file mode 100644 index 00000000..2b57ed25 Binary files /dev/null and b/assets/images/emoji/chicken.png differ diff --git a/assets/images/emoji/christmas_tree.png b/assets/images/emoji/christmas_tree.png new file mode 100644 index 00000000..ec99e0be Binary files /dev/null and b/assets/images/emoji/christmas_tree.png differ diff --git a/assets/images/emoji/church.png b/assets/images/emoji/church.png new file mode 100644 index 00000000..3600c589 Binary files /dev/null and b/assets/images/emoji/church.png differ diff --git a/assets/images/emoji/cinema.png b/assets/images/emoji/cinema.png new file mode 100644 index 00000000..448ff809 Binary files /dev/null and b/assets/images/emoji/cinema.png differ diff --git a/assets/images/emoji/city_sunrise.png b/assets/images/emoji/city_sunrise.png new file mode 100644 index 00000000..a076d9df Binary files /dev/null and b/assets/images/emoji/city_sunrise.png differ diff --git a/assets/images/emoji/city_sunset.png b/assets/images/emoji/city_sunset.png new file mode 100644 index 00000000..78fc5c4a Binary files /dev/null and b/assets/images/emoji/city_sunset.png differ diff --git a/assets/images/emoji/clap.png b/assets/images/emoji/clap.png new file mode 100644 index 00000000..a3845d70 Binary files /dev/null and b/assets/images/emoji/clap.png differ diff --git a/assets/images/emoji/clapper.png b/assets/images/emoji/clapper.png new file mode 100644 index 00000000..1af03bd7 Binary files /dev/null and b/assets/images/emoji/clapper.png differ diff --git a/assets/images/emoji/clock1.png b/assets/images/emoji/clock1.png new file mode 100644 index 00000000..4c55f8f7 Binary files /dev/null and b/assets/images/emoji/clock1.png differ diff --git a/assets/images/emoji/clock10.png b/assets/images/emoji/clock10.png new file mode 100644 index 00000000..d097b7f0 Binary files /dev/null and b/assets/images/emoji/clock10.png differ diff --git a/assets/images/emoji/clock11.png b/assets/images/emoji/clock11.png new file mode 100644 index 00000000..0a101daa Binary files /dev/null and b/assets/images/emoji/clock11.png differ diff --git a/assets/images/emoji/clock12.png b/assets/images/emoji/clock12.png new file mode 100644 index 00000000..e028d673 Binary files /dev/null and b/assets/images/emoji/clock12.png differ diff --git a/assets/images/emoji/clock2.png b/assets/images/emoji/clock2.png new file mode 100644 index 00000000..83a23ddb Binary files /dev/null and b/assets/images/emoji/clock2.png differ diff --git a/assets/images/emoji/clock3.png b/assets/images/emoji/clock3.png new file mode 100644 index 00000000..880176e4 Binary files /dev/null and b/assets/images/emoji/clock3.png differ diff --git a/assets/images/emoji/clock4.png b/assets/images/emoji/clock4.png new file mode 100644 index 00000000..cc9f3648 Binary files /dev/null and b/assets/images/emoji/clock4.png differ diff --git a/assets/images/emoji/clock5.png b/assets/images/emoji/clock5.png new file mode 100644 index 00000000..49626ea7 Binary files /dev/null and b/assets/images/emoji/clock5.png differ diff --git a/assets/images/emoji/clock6.png b/assets/images/emoji/clock6.png new file mode 100644 index 00000000..08cc70d2 Binary files /dev/null and b/assets/images/emoji/clock6.png differ diff --git a/assets/images/emoji/clock7.png b/assets/images/emoji/clock7.png new file mode 100644 index 00000000..26fcf6e0 Binary files /dev/null and b/assets/images/emoji/clock7.png differ diff --git a/assets/images/emoji/clock8.png b/assets/images/emoji/clock8.png new file mode 100644 index 00000000..df1b0ad2 Binary files /dev/null and b/assets/images/emoji/clock8.png differ diff --git a/assets/images/emoji/clock9.png b/assets/images/emoji/clock9.png new file mode 100644 index 00000000..649a79cb Binary files /dev/null and b/assets/images/emoji/clock9.png differ diff --git a/assets/images/emoji/closed_umbrella.png b/assets/images/emoji/closed_umbrella.png new file mode 100644 index 00000000..0fdfb872 Binary files /dev/null and b/assets/images/emoji/closed_umbrella.png differ diff --git a/assets/images/emoji/cloud.png b/assets/images/emoji/cloud.png new file mode 100644 index 00000000..564d056d Binary files /dev/null and b/assets/images/emoji/cloud.png differ diff --git a/assets/images/emoji/clubs.png b/assets/images/emoji/clubs.png new file mode 100644 index 00000000..cc1b874b Binary files /dev/null and b/assets/images/emoji/clubs.png differ diff --git a/assets/images/emoji/cn.png b/assets/images/emoji/cn.png new file mode 100644 index 00000000..75cf144d Binary files /dev/null and b/assets/images/emoji/cn.png differ diff --git a/assets/images/emoji/cocktail.png b/assets/images/emoji/cocktail.png new file mode 100644 index 00000000..c003656e Binary files /dev/null and b/assets/images/emoji/cocktail.png differ diff --git a/assets/images/emoji/coffee.png b/assets/images/emoji/coffee.png new file mode 100644 index 00000000..076281d5 Binary files /dev/null and b/assets/images/emoji/coffee.png differ diff --git a/assets/images/emoji/cold_sweat.png b/assets/images/emoji/cold_sweat.png new file mode 100644 index 00000000..dc53962a Binary files /dev/null and b/assets/images/emoji/cold_sweat.png differ diff --git a/assets/images/emoji/computer.png b/assets/images/emoji/computer.png new file mode 100644 index 00000000..f7075d4b Binary files /dev/null and b/assets/images/emoji/computer.png differ diff --git a/assets/images/emoji/confounded.png b/assets/images/emoji/confounded.png new file mode 100644 index 00000000..219dafef Binary files /dev/null and b/assets/images/emoji/confounded.png differ diff --git a/assets/images/emoji/congratulations.png b/assets/images/emoji/congratulations.png new file mode 100644 index 00000000..7d783977 Binary files /dev/null and b/assets/images/emoji/congratulations.png differ diff --git a/assets/images/emoji/construction.png b/assets/images/emoji/construction.png new file mode 100644 index 00000000..b0c95584 Binary files /dev/null and b/assets/images/emoji/construction.png differ diff --git a/assets/images/emoji/construction_worker.png b/assets/images/emoji/construction_worker.png new file mode 100644 index 00000000..7eed109b Binary files /dev/null and b/assets/images/emoji/construction_worker.png differ diff --git a/assets/images/emoji/convenience_store.png b/assets/images/emoji/convenience_store.png new file mode 100644 index 00000000..5c1a906a Binary files /dev/null and b/assets/images/emoji/convenience_store.png differ diff --git a/assets/images/emoji/cool.png b/assets/images/emoji/cool.png new file mode 100644 index 00000000..8dbf6aa6 Binary files /dev/null and b/assets/images/emoji/cool.png differ diff --git a/assets/images/emoji/cop.png b/assets/images/emoji/cop.png new file mode 100644 index 00000000..b3a62914 Binary files /dev/null and b/assets/images/emoji/cop.png differ diff --git a/assets/images/emoji/copyright.png b/assets/images/emoji/copyright.png new file mode 100644 index 00000000..00a6b07a Binary files /dev/null and b/assets/images/emoji/copyright.png differ diff --git a/assets/images/emoji/couple.png b/assets/images/emoji/couple.png new file mode 100644 index 00000000..698ed8ce Binary files /dev/null and b/assets/images/emoji/couple.png differ diff --git a/assets/images/emoji/couple_with_heart.png b/assets/images/emoji/couple_with_heart.png new file mode 100644 index 00000000..8652482f Binary files /dev/null and b/assets/images/emoji/couple_with_heart.png differ diff --git a/assets/images/emoji/couplekiss.png b/assets/images/emoji/couplekiss.png new file mode 100644 index 00000000..0468b41c Binary files /dev/null and b/assets/images/emoji/couplekiss.png differ diff --git a/assets/images/emoji/cow.png b/assets/images/emoji/cow.png new file mode 100644 index 00000000..efe8a44e Binary files /dev/null and b/assets/images/emoji/cow.png differ diff --git a/assets/images/emoji/crossed_flags.png b/assets/images/emoji/crossed_flags.png new file mode 100644 index 00000000..9f95128c Binary files /dev/null and b/assets/images/emoji/crossed_flags.png differ diff --git a/assets/images/emoji/crown.png b/assets/images/emoji/crown.png new file mode 100644 index 00000000..5b7e2a9e Binary files /dev/null and b/assets/images/emoji/crown.png differ diff --git a/assets/images/emoji/cry.png b/assets/images/emoji/cry.png new file mode 100644 index 00000000..11175cee Binary files /dev/null and b/assets/images/emoji/cry.png differ diff --git a/assets/images/emoji/cupid.png b/assets/images/emoji/cupid.png new file mode 100644 index 00000000..9791bfb0 Binary files /dev/null and b/assets/images/emoji/cupid.png differ diff --git a/assets/images/emoji/currency_exchange.png b/assets/images/emoji/currency_exchange.png new file mode 100644 index 00000000..8d846b85 Binary files /dev/null and b/assets/images/emoji/currency_exchange.png differ diff --git a/assets/images/emoji/curry.png b/assets/images/emoji/curry.png new file mode 100644 index 00000000..cd470810 Binary files /dev/null and b/assets/images/emoji/curry.png differ diff --git a/assets/images/emoji/cyclone.png b/assets/images/emoji/cyclone.png new file mode 100644 index 00000000..94216ffb Binary files /dev/null and b/assets/images/emoji/cyclone.png differ diff --git a/assets/images/emoji/dancer.png b/assets/images/emoji/dancer.png new file mode 100644 index 00000000..2a9895b4 Binary files /dev/null and b/assets/images/emoji/dancer.png differ diff --git a/assets/images/emoji/dancers.png b/assets/images/emoji/dancers.png new file mode 100644 index 00000000..4e48231e Binary files /dev/null and b/assets/images/emoji/dancers.png differ diff --git a/assets/images/emoji/dango.png b/assets/images/emoji/dango.png new file mode 100644 index 00000000..27d2c1f8 Binary files /dev/null and b/assets/images/emoji/dango.png differ diff --git a/assets/images/emoji/dart.png b/assets/images/emoji/dart.png new file mode 100644 index 00000000..d35614a2 Binary files /dev/null and b/assets/images/emoji/dart.png differ diff --git a/assets/images/emoji/dash.png b/assets/images/emoji/dash.png new file mode 100644 index 00000000..534ef442 Binary files /dev/null and b/assets/images/emoji/dash.png differ diff --git a/assets/images/emoji/de.png b/assets/images/emoji/de.png new file mode 100644 index 00000000..f0dde235 Binary files /dev/null and b/assets/images/emoji/de.png differ diff --git a/assets/images/emoji/department_store.png b/assets/images/emoji/department_store.png new file mode 100644 index 00000000..4330c8ac Binary files /dev/null and b/assets/images/emoji/department_store.png differ diff --git a/assets/images/emoji/diamonds.png b/assets/images/emoji/diamonds.png new file mode 100644 index 00000000..be9cdffc Binary files /dev/null and b/assets/images/emoji/diamonds.png differ diff --git a/assets/images/emoji/disappointed.png b/assets/images/emoji/disappointed.png new file mode 100644 index 00000000..cc18531c Binary files /dev/null and b/assets/images/emoji/disappointed.png differ diff --git a/assets/images/emoji/dog.png b/assets/images/emoji/dog.png new file mode 100644 index 00000000..43dbf654 Binary files /dev/null and b/assets/images/emoji/dog.png differ diff --git a/assets/images/emoji/dolls.png b/assets/images/emoji/dolls.png new file mode 100644 index 00000000..0edb37b0 Binary files /dev/null and b/assets/images/emoji/dolls.png differ diff --git a/assets/images/emoji/dolphin.png b/assets/images/emoji/dolphin.png new file mode 100644 index 00000000..bc15516f Binary files /dev/null and b/assets/images/emoji/dolphin.png differ diff --git a/assets/images/emoji/dress.png b/assets/images/emoji/dress.png new file mode 100644 index 00000000..3884e546 Binary files /dev/null and b/assets/images/emoji/dress.png differ diff --git a/assets/images/emoji/dvd.png b/assets/images/emoji/dvd.png new file mode 100644 index 00000000..f38631ae Binary files /dev/null and b/assets/images/emoji/dvd.png differ diff --git a/assets/images/emoji/ear.png b/assets/images/emoji/ear.png new file mode 100644 index 00000000..26fd9757 Binary files /dev/null and b/assets/images/emoji/ear.png differ diff --git a/assets/images/emoji/ear_of_rice.png b/assets/images/emoji/ear_of_rice.png new file mode 100644 index 00000000..9a64b786 Binary files /dev/null and b/assets/images/emoji/ear_of_rice.png differ diff --git a/assets/images/emoji/egg.png b/assets/images/emoji/egg.png new file mode 100644 index 00000000..7ca9357f Binary files /dev/null and b/assets/images/emoji/egg.png differ diff --git a/assets/images/emoji/eggplant.png b/assets/images/emoji/eggplant.png new file mode 100644 index 00000000..73582101 Binary files /dev/null and b/assets/images/emoji/eggplant.png differ diff --git a/assets/images/emoji/egplant.png b/assets/images/emoji/egplant.png new file mode 100644 index 00000000..b12cad33 Binary files /dev/null and b/assets/images/emoji/egplant.png differ diff --git a/assets/images/emoji/eight_pointed_black_star.png b/assets/images/emoji/eight_pointed_black_star.png new file mode 100644 index 00000000..9693e50c Binary files /dev/null and b/assets/images/emoji/eight_pointed_black_star.png differ diff --git a/assets/images/emoji/eight_spoked_asterisk.png b/assets/images/emoji/eight_spoked_asterisk.png new file mode 100644 index 00000000..459c1d2d Binary files /dev/null and b/assets/images/emoji/eight_spoked_asterisk.png differ diff --git a/assets/images/emoji/elephant.png b/assets/images/emoji/elephant.png new file mode 100644 index 00000000..c8010a66 Binary files /dev/null and b/assets/images/emoji/elephant.png differ diff --git a/assets/images/emoji/email.png b/assets/images/emoji/email.png new file mode 100644 index 00000000..22584b9b Binary files /dev/null and b/assets/images/emoji/email.png differ diff --git a/assets/images/emoji/es.png b/assets/images/emoji/es.png new file mode 100644 index 00000000..e6fa0f2f Binary files /dev/null and b/assets/images/emoji/es.png differ diff --git a/assets/images/emoji/european_castle.png b/assets/images/emoji/european_castle.png new file mode 100644 index 00000000..8a8a4c99 Binary files /dev/null and b/assets/images/emoji/european_castle.png differ diff --git a/assets/images/emoji/exclamation.png b/assets/images/emoji/exclamation.png new file mode 100644 index 00000000..2171aa8d Binary files /dev/null and b/assets/images/emoji/exclamation.png differ diff --git a/assets/images/emoji/eyes.png b/assets/images/emoji/eyes.png new file mode 100644 index 00000000..b02c44e3 Binary files /dev/null and b/assets/images/emoji/eyes.png differ diff --git a/assets/images/emoji/factory.png b/assets/images/emoji/factory.png new file mode 100644 index 00000000..f80c4ec6 Binary files /dev/null and b/assets/images/emoji/factory.png differ diff --git a/assets/images/emoji/fallen_leaf.png b/assets/images/emoji/fallen_leaf.png new file mode 100644 index 00000000..dc6c3137 Binary files /dev/null and b/assets/images/emoji/fallen_leaf.png differ diff --git a/assets/images/emoji/fast_forward.png b/assets/images/emoji/fast_forward.png new file mode 100644 index 00000000..c478e558 Binary files /dev/null and b/assets/images/emoji/fast_forward.png differ diff --git a/assets/images/emoji/fax.png b/assets/images/emoji/fax.png new file mode 100644 index 00000000..e20110fe Binary files /dev/null and b/assets/images/emoji/fax.png differ diff --git a/assets/images/emoji/fearful.png b/assets/images/emoji/fearful.png new file mode 100644 index 00000000..46765149 Binary files /dev/null and b/assets/images/emoji/fearful.png differ diff --git a/assets/images/emoji/feelsgood.png b/assets/images/emoji/feelsgood.png new file mode 100644 index 00000000..54567b97 Binary files /dev/null and b/assets/images/emoji/feelsgood.png differ diff --git a/assets/images/emoji/feet.png b/assets/images/emoji/feet.png new file mode 100644 index 00000000..af5261aa Binary files /dev/null and b/assets/images/emoji/feet.png differ diff --git a/assets/images/emoji/ferris_wheel.png b/assets/images/emoji/ferris_wheel.png new file mode 100644 index 00000000..9b791ca5 Binary files /dev/null and b/assets/images/emoji/ferris_wheel.png differ diff --git a/assets/images/emoji/finnadie.png b/assets/images/emoji/finnadie.png new file mode 100644 index 00000000..12394fc8 Binary files /dev/null and b/assets/images/emoji/finnadie.png differ diff --git a/assets/images/emoji/fire.png b/assets/images/emoji/fire.png new file mode 100644 index 00000000..fd6bc84e Binary files /dev/null and b/assets/images/emoji/fire.png differ diff --git a/assets/images/emoji/fire_engine.png b/assets/images/emoji/fire_engine.png new file mode 100644 index 00000000..1c115bba Binary files /dev/null and b/assets/images/emoji/fire_engine.png differ diff --git a/assets/images/emoji/fireworks.png b/assets/images/emoji/fireworks.png new file mode 100644 index 00000000..435247db Binary files /dev/null and b/assets/images/emoji/fireworks.png differ diff --git a/assets/images/emoji/fish.png b/assets/images/emoji/fish.png new file mode 100644 index 00000000..e0195747 Binary files /dev/null and b/assets/images/emoji/fish.png differ diff --git a/assets/images/emoji/fist.png b/assets/images/emoji/fist.png new file mode 100644 index 00000000..2d4a5147 Binary files /dev/null and b/assets/images/emoji/fist.png differ diff --git a/assets/images/emoji/flags.png b/assets/images/emoji/flags.png new file mode 100644 index 00000000..ed6d0153 Binary files /dev/null and b/assets/images/emoji/flags.png differ diff --git a/assets/images/emoji/flushed.png b/assets/images/emoji/flushed.png new file mode 100644 index 00000000..866466ba Binary files /dev/null and b/assets/images/emoji/flushed.png differ diff --git a/assets/images/emoji/football.png b/assets/images/emoji/football.png new file mode 100644 index 00000000..07d67ece Binary files /dev/null and b/assets/images/emoji/football.png differ diff --git a/assets/images/emoji/fork_and_knife.png b/assets/images/emoji/fork_and_knife.png new file mode 100644 index 00000000..8f031940 Binary files /dev/null and b/assets/images/emoji/fork_and_knife.png differ diff --git a/assets/images/emoji/fountain.png b/assets/images/emoji/fountain.png new file mode 100644 index 00000000..38b52329 Binary files /dev/null and b/assets/images/emoji/fountain.png differ diff --git a/assets/images/emoji/four_leaf_clover.png b/assets/images/emoji/four_leaf_clover.png new file mode 100644 index 00000000..adaf4ce1 Binary files /dev/null and b/assets/images/emoji/four_leaf_clover.png differ diff --git a/assets/images/emoji/fr.png b/assets/images/emoji/fr.png new file mode 100644 index 00000000..2a2afb76 Binary files /dev/null and b/assets/images/emoji/fr.png differ diff --git a/assets/images/emoji/fries.png b/assets/images/emoji/fries.png new file mode 100644 index 00000000..727b5578 Binary files /dev/null and b/assets/images/emoji/fries.png differ diff --git a/assets/images/emoji/frog.png b/assets/images/emoji/frog.png new file mode 100644 index 00000000..bac9a67e Binary files /dev/null and b/assets/images/emoji/frog.png differ diff --git a/assets/images/emoji/fuelpump.png b/assets/images/emoji/fuelpump.png new file mode 100644 index 00000000..d229b667 Binary files /dev/null and b/assets/images/emoji/fuelpump.png differ diff --git a/assets/images/emoji/gb.png b/assets/images/emoji/gb.png new file mode 100644 index 00000000..d9eab20a Binary files /dev/null and b/assets/images/emoji/gb.png differ diff --git a/assets/images/emoji/gem.png b/assets/images/emoji/gem.png new file mode 100644 index 00000000..1245c0ad Binary files /dev/null and b/assets/images/emoji/gem.png differ diff --git a/assets/images/emoji/gemini.png b/assets/images/emoji/gemini.png new file mode 100644 index 00000000..db22fba8 Binary files /dev/null and b/assets/images/emoji/gemini.png differ diff --git a/assets/images/emoji/ghost.png b/assets/images/emoji/ghost.png new file mode 100644 index 00000000..23408c40 Binary files /dev/null and b/assets/images/emoji/ghost.png differ diff --git a/assets/images/emoji/gift.png b/assets/images/emoji/gift.png new file mode 100644 index 00000000..b6262ebb Binary files /dev/null and b/assets/images/emoji/gift.png differ diff --git a/assets/images/emoji/gift_heart.png b/assets/images/emoji/gift_heart.png new file mode 100644 index 00000000..12305e24 Binary files /dev/null and b/assets/images/emoji/gift_heart.png differ diff --git a/assets/images/emoji/girl.png b/assets/images/emoji/girl.png new file mode 100644 index 00000000..98c032da Binary files /dev/null and b/assets/images/emoji/girl.png differ diff --git a/assets/images/emoji/goberserk.png b/assets/images/emoji/goberserk.png new file mode 100644 index 00000000..8d3917a5 Binary files /dev/null and b/assets/images/emoji/goberserk.png differ diff --git a/assets/images/emoji/godmode.png b/assets/images/emoji/godmode.png new file mode 100644 index 00000000..d8feb0d8 Binary files /dev/null and b/assets/images/emoji/godmode.png differ diff --git a/assets/images/emoji/golf.png b/assets/images/emoji/golf.png new file mode 100644 index 00000000..f30131f6 Binary files /dev/null and b/assets/images/emoji/golf.png differ diff --git a/assets/images/emoji/green_heart.png b/assets/images/emoji/green_heart.png new file mode 100644 index 00000000..1b0b4d16 Binary files /dev/null and b/assets/images/emoji/green_heart.png differ diff --git a/assets/images/emoji/grey_exclamation.png b/assets/images/emoji/grey_exclamation.png new file mode 100644 index 00000000..c94a2b93 Binary files /dev/null and b/assets/images/emoji/grey_exclamation.png differ diff --git a/assets/images/emoji/grey_question.png b/assets/images/emoji/grey_question.png new file mode 100644 index 00000000..a50cca2a Binary files /dev/null and b/assets/images/emoji/grey_question.png differ diff --git a/assets/images/emoji/grin.png b/assets/images/emoji/grin.png new file mode 100644 index 00000000..694bf56f Binary files /dev/null and b/assets/images/emoji/grin.png differ diff --git a/assets/images/emoji/guardsman.png b/assets/images/emoji/guardsman.png new file mode 100644 index 00000000..c228553b Binary files /dev/null and b/assets/images/emoji/guardsman.png differ diff --git a/assets/images/emoji/guitar.png b/assets/images/emoji/guitar.png new file mode 100644 index 00000000..81ee4722 Binary files /dev/null and b/assets/images/emoji/guitar.png differ diff --git a/assets/images/emoji/gun.png b/assets/images/emoji/gun.png new file mode 100644 index 00000000..24209c4a Binary files /dev/null and b/assets/images/emoji/gun.png differ diff --git a/assets/images/emoji/haircut.png b/assets/images/emoji/haircut.png new file mode 100644 index 00000000..c3bca9b4 Binary files /dev/null and b/assets/images/emoji/haircut.png differ diff --git a/assets/images/emoji/hamburger.png b/assets/images/emoji/hamburger.png new file mode 100644 index 00000000..f3c76f63 Binary files /dev/null and b/assets/images/emoji/hamburger.png differ diff --git a/assets/images/emoji/hammer.png b/assets/images/emoji/hammer.png new file mode 100644 index 00000000..99f5a2f5 Binary files /dev/null and b/assets/images/emoji/hammer.png differ diff --git a/assets/images/emoji/hamster.png b/assets/images/emoji/hamster.png new file mode 100644 index 00000000..5c9340b0 Binary files /dev/null and b/assets/images/emoji/hamster.png differ diff --git a/assets/images/emoji/hand.png b/assets/images/emoji/hand.png new file mode 100644 index 00000000..1cdf992f Binary files /dev/null and b/assets/images/emoji/hand.png differ diff --git a/assets/images/emoji/handbag.png b/assets/images/emoji/handbag.png new file mode 100644 index 00000000..34fec65c Binary files /dev/null and b/assets/images/emoji/handbag.png differ diff --git a/assets/images/emoji/hankey.png b/assets/images/emoji/hankey.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/assets/images/emoji/hankey.png differ diff --git a/assets/images/emoji/hash.png b/assets/images/emoji/hash.png new file mode 100644 index 00000000..4fdc5cc0 Binary files /dev/null and b/assets/images/emoji/hash.png differ diff --git a/assets/images/emoji/headphones.png b/assets/images/emoji/headphones.png new file mode 100644 index 00000000..440ed43f Binary files /dev/null and b/assets/images/emoji/headphones.png differ diff --git a/assets/images/emoji/heart.png b/assets/images/emoji/heart.png new file mode 100644 index 00000000..5de16c9f Binary files /dev/null and b/assets/images/emoji/heart.png differ diff --git a/assets/images/emoji/heart_decoration.png b/assets/images/emoji/heart_decoration.png new file mode 100644 index 00000000..f895cf53 Binary files /dev/null and b/assets/images/emoji/heart_decoration.png differ diff --git a/assets/images/emoji/heart_eyes.png b/assets/images/emoji/heart_eyes.png new file mode 100644 index 00000000..ef85cb66 Binary files /dev/null and b/assets/images/emoji/heart_eyes.png differ diff --git a/assets/images/emoji/heartbeat.png b/assets/images/emoji/heartbeat.png new file mode 100644 index 00000000..ce670748 Binary files /dev/null and b/assets/images/emoji/heartbeat.png differ diff --git a/assets/images/emoji/heartpulse.png b/assets/images/emoji/heartpulse.png new file mode 100644 index 00000000..dc7e55d3 Binary files /dev/null and b/assets/images/emoji/heartpulse.png differ diff --git a/assets/images/emoji/hearts.png b/assets/images/emoji/hearts.png new file mode 100644 index 00000000..be35ebdd Binary files /dev/null and b/assets/images/emoji/hearts.png differ diff --git a/assets/images/emoji/hibiscus.png b/assets/images/emoji/hibiscus.png new file mode 100644 index 00000000..0f1c4af0 Binary files /dev/null and b/assets/images/emoji/hibiscus.png differ diff --git a/assets/images/emoji/high_heel.png b/assets/images/emoji/high_heel.png new file mode 100644 index 00000000..275389ed Binary files /dev/null and b/assets/images/emoji/high_heel.png differ diff --git a/assets/images/emoji/horse.png b/assets/images/emoji/horse.png new file mode 100644 index 00000000..9e43abfd Binary files /dev/null and b/assets/images/emoji/horse.png differ diff --git a/assets/images/emoji/hospital.png b/assets/images/emoji/hospital.png new file mode 100644 index 00000000..2c72c9a5 Binary files /dev/null and b/assets/images/emoji/hospital.png differ diff --git a/assets/images/emoji/hotel.png b/assets/images/emoji/hotel.png new file mode 100644 index 00000000..1b1b48ee Binary files /dev/null and b/assets/images/emoji/hotel.png differ diff --git a/assets/images/emoji/hotsprings.png b/assets/images/emoji/hotsprings.png new file mode 100644 index 00000000..64c6a1d7 Binary files /dev/null and b/assets/images/emoji/hotsprings.png differ diff --git a/assets/images/emoji/house.png b/assets/images/emoji/house.png new file mode 100644 index 00000000..fdaeca1a Binary files /dev/null and b/assets/images/emoji/house.png differ diff --git a/assets/images/emoji/hurtrealbad.png b/assets/images/emoji/hurtrealbad.png new file mode 100644 index 00000000..68153c60 Binary files /dev/null and b/assets/images/emoji/hurtrealbad.png differ diff --git a/assets/images/emoji/icecream.png b/assets/images/emoji/icecream.png new file mode 100644 index 00000000..22d32c5b Binary files /dev/null and b/assets/images/emoji/icecream.png differ diff --git a/assets/images/emoji/id.png b/assets/images/emoji/id.png new file mode 100644 index 00000000..0bd32b0e Binary files /dev/null and b/assets/images/emoji/id.png differ diff --git a/assets/images/emoji/ideograph_advantage.png b/assets/images/emoji/ideograph_advantage.png new file mode 100644 index 00000000..fad3f964 Binary files /dev/null and b/assets/images/emoji/ideograph_advantage.png differ diff --git a/assets/images/emoji/imp.png b/assets/images/emoji/imp.png new file mode 100644 index 00000000..c69f6b70 Binary files /dev/null and b/assets/images/emoji/imp.png differ diff --git a/assets/images/emoji/information_desk_person.png b/assets/images/emoji/information_desk_person.png new file mode 100644 index 00000000..f6eb7216 Binary files /dev/null and b/assets/images/emoji/information_desk_person.png differ diff --git a/assets/images/emoji/iphone.png b/assets/images/emoji/iphone.png new file mode 100644 index 00000000..7995a678 Binary files /dev/null and b/assets/images/emoji/iphone.png differ diff --git a/assets/images/emoji/it.png b/assets/images/emoji/it.png new file mode 100644 index 00000000..fc3e8a2d Binary files /dev/null and b/assets/images/emoji/it.png differ diff --git a/assets/images/emoji/jack_o_lantern.png b/assets/images/emoji/jack_o_lantern.png new file mode 100644 index 00000000..23ae0e98 Binary files /dev/null and b/assets/images/emoji/jack_o_lantern.png differ diff --git a/assets/images/emoji/japanese_castle.png b/assets/images/emoji/japanese_castle.png new file mode 100644 index 00000000..bb76bcc0 Binary files /dev/null and b/assets/images/emoji/japanese_castle.png differ diff --git a/assets/images/emoji/joy.png b/assets/images/emoji/joy.png new file mode 100644 index 00000000..f6f27e48 Binary files /dev/null and b/assets/images/emoji/joy.png differ diff --git a/assets/images/emoji/jp.png b/assets/images/emoji/jp.png new file mode 100644 index 00000000..8c6e76d7 Binary files /dev/null and b/assets/images/emoji/jp.png differ diff --git a/assets/images/emoji/key.png b/assets/images/emoji/key.png new file mode 100644 index 00000000..05159c57 Binary files /dev/null and b/assets/images/emoji/key.png differ diff --git a/assets/images/emoji/kimono.png b/assets/images/emoji/kimono.png new file mode 100644 index 00000000..4c9456e7 Binary files /dev/null and b/assets/images/emoji/kimono.png differ diff --git a/assets/images/emoji/kiss.png b/assets/images/emoji/kiss.png new file mode 100644 index 00000000..141bb429 Binary files /dev/null and b/assets/images/emoji/kiss.png differ diff --git a/assets/images/emoji/kissing_face.png b/assets/images/emoji/kissing_face.png new file mode 100644 index 00000000..6143085a Binary files /dev/null and b/assets/images/emoji/kissing_face.png differ diff --git a/assets/images/emoji/kissing_heart.png b/assets/images/emoji/kissing_heart.png new file mode 100644 index 00000000..df01721b Binary files /dev/null and b/assets/images/emoji/kissing_heart.png differ diff --git a/assets/images/emoji/koala.png b/assets/images/emoji/koala.png new file mode 100644 index 00000000..cac71a4e Binary files /dev/null and b/assets/images/emoji/koala.png differ diff --git a/assets/images/emoji/koko.png b/assets/images/emoji/koko.png new file mode 100644 index 00000000..dd6e90c1 Binary files /dev/null and b/assets/images/emoji/koko.png differ diff --git a/assets/images/emoji/kr.png b/assets/images/emoji/kr.png new file mode 100644 index 00000000..c37b34d5 Binary files /dev/null and b/assets/images/emoji/kr.png differ diff --git a/assets/images/emoji/leaves.png b/assets/images/emoji/leaves.png new file mode 100644 index 00000000..9021b3ea Binary files /dev/null and b/assets/images/emoji/leaves.png differ diff --git a/assets/images/emoji/leo.png b/assets/images/emoji/leo.png new file mode 100644 index 00000000..1432e36c Binary files /dev/null and b/assets/images/emoji/leo.png differ diff --git a/assets/images/emoji/libra.png b/assets/images/emoji/libra.png new file mode 100644 index 00000000..bd35d66d Binary files /dev/null and b/assets/images/emoji/libra.png differ diff --git a/assets/images/emoji/lips.png b/assets/images/emoji/lips.png new file mode 100644 index 00000000..f996a8a6 Binary files /dev/null and b/assets/images/emoji/lips.png differ diff --git a/assets/images/emoji/lipstick.png b/assets/images/emoji/lipstick.png new file mode 100644 index 00000000..214ecded Binary files /dev/null and b/assets/images/emoji/lipstick.png differ diff --git a/assets/images/emoji/lock.png b/assets/images/emoji/lock.png new file mode 100644 index 00000000..5c35d91d Binary files /dev/null and b/assets/images/emoji/lock.png differ diff --git a/assets/images/emoji/loop.png b/assets/images/emoji/loop.png new file mode 100644 index 00000000..68807b91 Binary files /dev/null and b/assets/images/emoji/loop.png differ diff --git a/assets/images/emoji/loudspeaker.png b/assets/images/emoji/loudspeaker.png new file mode 100644 index 00000000..d5ffa73b Binary files /dev/null and b/assets/images/emoji/loudspeaker.png differ diff --git a/assets/images/emoji/love_hotel.png b/assets/images/emoji/love_hotel.png new file mode 100644 index 00000000..dc168a91 Binary files /dev/null and b/assets/images/emoji/love_hotel.png differ diff --git a/assets/images/emoji/mag.png b/assets/images/emoji/mag.png new file mode 100644 index 00000000..9b03915a Binary files /dev/null and b/assets/images/emoji/mag.png differ diff --git a/assets/images/emoji/mahjong.png b/assets/images/emoji/mahjong.png new file mode 100644 index 00000000..9fe286e2 Binary files /dev/null and b/assets/images/emoji/mahjong.png differ diff --git a/assets/images/emoji/mailbox.png b/assets/images/emoji/mailbox.png new file mode 100644 index 00000000..47d2ee7e Binary files /dev/null and b/assets/images/emoji/mailbox.png differ diff --git a/assets/images/emoji/man.png b/assets/images/emoji/man.png new file mode 100644 index 00000000..be0c82c6 Binary files /dev/null and b/assets/images/emoji/man.png differ diff --git a/assets/images/emoji/man_with_gua_pi_mao.png b/assets/images/emoji/man_with_gua_pi_mao.png new file mode 100644 index 00000000..79448395 Binary files /dev/null and b/assets/images/emoji/man_with_gua_pi_mao.png differ diff --git a/assets/images/emoji/man_with_turban.png b/assets/images/emoji/man_with_turban.png new file mode 100644 index 00000000..4a31f317 Binary files /dev/null and b/assets/images/emoji/man_with_turban.png differ diff --git a/assets/images/emoji/maple_leaf.png b/assets/images/emoji/maple_leaf.png new file mode 100644 index 00000000..dc7d1bbc Binary files /dev/null and b/assets/images/emoji/maple_leaf.png differ diff --git a/assets/images/emoji/mask.png b/assets/images/emoji/mask.png new file mode 100644 index 00000000..e71b212c Binary files /dev/null and b/assets/images/emoji/mask.png differ diff --git a/assets/images/emoji/massage.png b/assets/images/emoji/massage.png new file mode 100644 index 00000000..89215138 Binary files /dev/null and b/assets/images/emoji/massage.png differ diff --git a/assets/images/emoji/mega.png b/assets/images/emoji/mega.png new file mode 100644 index 00000000..d66178b2 Binary files /dev/null and b/assets/images/emoji/mega.png differ diff --git a/assets/images/emoji/memo.png b/assets/images/emoji/memo.png new file mode 100644 index 00000000..9b890c3d Binary files /dev/null and b/assets/images/emoji/memo.png differ diff --git a/assets/images/emoji/mens.png b/assets/images/emoji/mens.png new file mode 100644 index 00000000..1749c4aa Binary files /dev/null and b/assets/images/emoji/mens.png differ diff --git a/assets/images/emoji/metal.png b/assets/images/emoji/metal.png new file mode 100644 index 00000000..1bbac1d4 Binary files /dev/null and b/assets/images/emoji/metal.png differ diff --git a/assets/images/emoji/metro.png b/assets/images/emoji/metro.png new file mode 100644 index 00000000..ca0204a0 Binary files /dev/null and b/assets/images/emoji/metro.png differ diff --git a/assets/images/emoji/microphone.png b/assets/images/emoji/microphone.png new file mode 100644 index 00000000..79dffda8 Binary files /dev/null and b/assets/images/emoji/microphone.png differ diff --git a/assets/images/emoji/minidisc.png b/assets/images/emoji/minidisc.png new file mode 100644 index 00000000..8e8245bd Binary files /dev/null and b/assets/images/emoji/minidisc.png differ diff --git a/assets/images/emoji/mobile_phone_off.png b/assets/images/emoji/mobile_phone_off.png new file mode 100644 index 00000000..621cf190 Binary files /dev/null and b/assets/images/emoji/mobile_phone_off.png differ diff --git a/assets/images/emoji/moneybag.png b/assets/images/emoji/moneybag.png new file mode 100644 index 00000000..efafdf14 Binary files /dev/null and b/assets/images/emoji/moneybag.png differ diff --git a/assets/images/emoji/monkey.png b/assets/images/emoji/monkey.png new file mode 100644 index 00000000..33b1381c Binary files /dev/null and b/assets/images/emoji/monkey.png differ diff --git a/assets/images/emoji/monkey_face.png b/assets/images/emoji/monkey_face.png new file mode 100644 index 00000000..c137de49 Binary files /dev/null and b/assets/images/emoji/monkey_face.png differ diff --git a/assets/images/emoji/moon.png b/assets/images/emoji/moon.png new file mode 100644 index 00000000..a2ace7ab Binary files /dev/null and b/assets/images/emoji/moon.png differ diff --git a/assets/images/emoji/mortar_board.png b/assets/images/emoji/mortar_board.png new file mode 100644 index 00000000..a7df3e48 Binary files /dev/null and b/assets/images/emoji/mortar_board.png differ diff --git a/assets/images/emoji/mount_fuji.png b/assets/images/emoji/mount_fuji.png new file mode 100644 index 00000000..2fdebf6e Binary files /dev/null and b/assets/images/emoji/mount_fuji.png differ diff --git a/assets/images/emoji/mouse.png b/assets/images/emoji/mouse.png new file mode 100644 index 00000000..35da0e5c Binary files /dev/null and b/assets/images/emoji/mouse.png differ diff --git a/assets/images/emoji/movie_camera.png b/assets/images/emoji/movie_camera.png new file mode 100644 index 00000000..ec2047ce Binary files /dev/null and b/assets/images/emoji/movie_camera.png differ diff --git a/assets/images/emoji/muscle.png b/assets/images/emoji/muscle.png new file mode 100644 index 00000000..5381079f Binary files /dev/null and b/assets/images/emoji/muscle.png differ diff --git a/assets/images/emoji/musical_note.png b/assets/images/emoji/musical_note.png new file mode 100644 index 00000000..476d49e4 Binary files /dev/null and b/assets/images/emoji/musical_note.png differ diff --git a/assets/images/emoji/nail_care.png b/assets/images/emoji/nail_care.png new file mode 100644 index 00000000..acb0d774 Binary files /dev/null and b/assets/images/emoji/nail_care.png differ diff --git a/assets/images/emoji/necktie.png b/assets/images/emoji/necktie.png new file mode 100644 index 00000000..e5909380 Binary files /dev/null and b/assets/images/emoji/necktie.png differ diff --git a/assets/images/emoji/new.png b/assets/images/emoji/new.png new file mode 100644 index 00000000..8c586250 Binary files /dev/null and b/assets/images/emoji/new.png differ diff --git a/assets/images/emoji/no_good.png b/assets/images/emoji/no_good.png new file mode 100644 index 00000000..06bc3a87 Binary files /dev/null and b/assets/images/emoji/no_good.png differ diff --git a/assets/images/emoji/no_smoking.png b/assets/images/emoji/no_smoking.png new file mode 100644 index 00000000..a304c808 Binary files /dev/null and b/assets/images/emoji/no_smoking.png differ diff --git a/assets/images/emoji/nose.png b/assets/images/emoji/nose.png new file mode 100644 index 00000000..6ecf9fbc Binary files /dev/null and b/assets/images/emoji/nose.png differ diff --git a/assets/images/emoji/notes.png b/assets/images/emoji/notes.png new file mode 100644 index 00000000..4f445684 Binary files /dev/null and b/assets/images/emoji/notes.png differ diff --git a/assets/images/emoji/o.png b/assets/images/emoji/o.png new file mode 100644 index 00000000..a283db8f Binary files /dev/null and b/assets/images/emoji/o.png differ diff --git a/assets/images/emoji/o2.png b/assets/images/emoji/o2.png new file mode 100644 index 00000000..9858eed4 Binary files /dev/null and b/assets/images/emoji/o2.png differ diff --git a/assets/images/emoji/ocean.png b/assets/images/emoji/ocean.png new file mode 100644 index 00000000..6f1bb9d1 Binary files /dev/null and b/assets/images/emoji/ocean.png differ diff --git a/assets/images/emoji/octocat.png b/assets/images/emoji/octocat.png new file mode 100644 index 00000000..0b68cf0d Binary files /dev/null and b/assets/images/emoji/octocat.png differ diff --git a/assets/images/emoji/octopus.png b/assets/images/emoji/octopus.png new file mode 100644 index 00000000..7deac05f Binary files /dev/null and b/assets/images/emoji/octopus.png differ diff --git a/assets/images/emoji/oden.png b/assets/images/emoji/oden.png new file mode 100644 index 00000000..66fbc2c7 Binary files /dev/null and b/assets/images/emoji/oden.png differ diff --git a/assets/images/emoji/office.png b/assets/images/emoji/office.png new file mode 100644 index 00000000..1b2a2862 Binary files /dev/null and b/assets/images/emoji/office.png differ diff --git a/assets/images/emoji/ok.png b/assets/images/emoji/ok.png new file mode 100644 index 00000000..015870e2 Binary files /dev/null and b/assets/images/emoji/ok.png differ diff --git a/assets/images/emoji/ok_hand.png b/assets/images/emoji/ok_hand.png new file mode 100644 index 00000000..636d39bb Binary files /dev/null and b/assets/images/emoji/ok_hand.png differ diff --git a/assets/images/emoji/ok_woman.png b/assets/images/emoji/ok_woman.png new file mode 100644 index 00000000..3b3ebba6 Binary files /dev/null and b/assets/images/emoji/ok_woman.png differ diff --git a/assets/images/emoji/older_man.png b/assets/images/emoji/older_man.png new file mode 100644 index 00000000..ecfb575a Binary files /dev/null and b/assets/images/emoji/older_man.png differ diff --git a/assets/images/emoji/older_woman.png b/assets/images/emoji/older_woman.png new file mode 100644 index 00000000..1d565d8d Binary files /dev/null and b/assets/images/emoji/older_woman.png differ diff --git a/assets/images/emoji/open_hands.png b/assets/images/emoji/open_hands.png new file mode 100644 index 00000000..bc2fe3de Binary files /dev/null and b/assets/images/emoji/open_hands.png differ diff --git a/assets/images/emoji/ophiuchus.png b/assets/images/emoji/ophiuchus.png new file mode 100644 index 00000000..8c4be843 Binary files /dev/null and b/assets/images/emoji/ophiuchus.png differ diff --git a/assets/images/emoji/palm_tree.png b/assets/images/emoji/palm_tree.png new file mode 100644 index 00000000..92fc3c2c Binary files /dev/null and b/assets/images/emoji/palm_tree.png differ diff --git a/assets/images/emoji/parking.png b/assets/images/emoji/parking.png new file mode 100644 index 00000000..bd114958 Binary files /dev/null and b/assets/images/emoji/parking.png differ diff --git a/assets/images/emoji/part_alternation_mark.png b/assets/images/emoji/part_alternation_mark.png new file mode 100644 index 00000000..bff6f750 Binary files /dev/null and b/assets/images/emoji/part_alternation_mark.png differ diff --git a/assets/images/emoji/pencil.png b/assets/images/emoji/pencil.png new file mode 100644 index 00000000..9b890c3d Binary files /dev/null and b/assets/images/emoji/pencil.png differ diff --git a/assets/images/emoji/penguin.png b/assets/images/emoji/penguin.png new file mode 100644 index 00000000..541e8531 Binary files /dev/null and b/assets/images/emoji/penguin.png differ diff --git a/assets/images/emoji/pensive.png b/assets/images/emoji/pensive.png new file mode 100644 index 00000000..e6e1624a Binary files /dev/null and b/assets/images/emoji/pensive.png differ diff --git a/assets/images/emoji/persevere.png b/assets/images/emoji/persevere.png new file mode 100644 index 00000000..a6a347ed Binary files /dev/null and b/assets/images/emoji/persevere.png differ diff --git a/assets/images/emoji/person_with_blond_hair.png b/assets/images/emoji/person_with_blond_hair.png new file mode 100644 index 00000000..4abdfdf0 Binary files /dev/null and b/assets/images/emoji/person_with_blond_hair.png differ diff --git a/assets/images/emoji/phone.png b/assets/images/emoji/phone.png new file mode 100644 index 00000000..e1d64368 Binary files /dev/null and b/assets/images/emoji/phone.png differ diff --git a/assets/images/emoji/pig.png b/assets/images/emoji/pig.png new file mode 100644 index 00000000..38b05b41 Binary files /dev/null and b/assets/images/emoji/pig.png differ diff --git a/assets/images/emoji/pill.png b/assets/images/emoji/pill.png new file mode 100644 index 00000000..405d1c57 Binary files /dev/null and b/assets/images/emoji/pill.png differ diff --git a/assets/images/emoji/pisces.png b/assets/images/emoji/pisces.png new file mode 100644 index 00000000..5f49272f Binary files /dev/null and b/assets/images/emoji/pisces.png differ diff --git a/assets/images/emoji/plus1.png b/assets/images/emoji/plus1.png new file mode 100644 index 00000000..4dae7a09 Binary files /dev/null and b/assets/images/emoji/plus1.png differ diff --git a/assets/images/emoji/point_down.png b/assets/images/emoji/point_down.png new file mode 100644 index 00000000..37f4eb1b Binary files /dev/null and b/assets/images/emoji/point_down.png differ diff --git a/assets/images/emoji/point_left.png b/assets/images/emoji/point_left.png new file mode 100644 index 00000000..4faf0db8 Binary files /dev/null and b/assets/images/emoji/point_left.png differ diff --git a/assets/images/emoji/point_right.png b/assets/images/emoji/point_right.png new file mode 100644 index 00000000..6d0b8f3b Binary files /dev/null and b/assets/images/emoji/point_right.png differ diff --git a/assets/images/emoji/point_up.png b/assets/images/emoji/point_up.png new file mode 100644 index 00000000..533a3d1b Binary files /dev/null and b/assets/images/emoji/point_up.png differ diff --git a/assets/images/emoji/point_up_2.png b/assets/images/emoji/point_up_2.png new file mode 100644 index 00000000..87956d23 Binary files /dev/null and b/assets/images/emoji/point_up_2.png differ diff --git a/assets/images/emoji/police_car.png b/assets/images/emoji/police_car.png new file mode 100644 index 00000000..00a4e173 Binary files /dev/null and b/assets/images/emoji/police_car.png differ diff --git a/assets/images/emoji/poop.png b/assets/images/emoji/poop.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/assets/images/emoji/poop.png differ diff --git a/assets/images/emoji/post_office.png b/assets/images/emoji/post_office.png new file mode 100644 index 00000000..4ec24548 Binary files /dev/null and b/assets/images/emoji/post_office.png differ diff --git a/assets/images/emoji/postbox.png b/assets/images/emoji/postbox.png new file mode 100644 index 00000000..1cb2ea99 Binary files /dev/null and b/assets/images/emoji/postbox.png differ diff --git a/assets/images/emoji/pray.png b/assets/images/emoji/pray.png new file mode 100644 index 00000000..b91bde40 Binary files /dev/null and b/assets/images/emoji/pray.png differ diff --git a/assets/images/emoji/princess.png b/assets/images/emoji/princess.png new file mode 100644 index 00000000..90a2f9e1 Binary files /dev/null and b/assets/images/emoji/princess.png differ diff --git a/assets/images/emoji/punch.png b/assets/images/emoji/punch.png new file mode 100644 index 00000000..52dbccae Binary files /dev/null and b/assets/images/emoji/punch.png differ diff --git a/assets/images/emoji/purple_heart.png b/assets/images/emoji/purple_heart.png new file mode 100644 index 00000000..98c0bc72 Binary files /dev/null and b/assets/images/emoji/purple_heart.png differ diff --git a/assets/images/emoji/question.png b/assets/images/emoji/question.png new file mode 100644 index 00000000..1c3edc0a Binary files /dev/null and b/assets/images/emoji/question.png differ diff --git a/assets/images/emoji/rabbit.png b/assets/images/emoji/rabbit.png new file mode 100644 index 00000000..178f91dd Binary files /dev/null and b/assets/images/emoji/rabbit.png differ diff --git a/assets/images/emoji/racehorse.png b/assets/images/emoji/racehorse.png new file mode 100644 index 00000000..e3267946 Binary files /dev/null and b/assets/images/emoji/racehorse.png differ diff --git a/assets/images/emoji/radio.png b/assets/images/emoji/radio.png new file mode 100644 index 00000000..e377db2c Binary files /dev/null and b/assets/images/emoji/radio.png differ diff --git a/assets/images/emoji/rage.png b/assets/images/emoji/rage.png new file mode 100644 index 00000000..cdd8858c Binary files /dev/null and b/assets/images/emoji/rage.png differ diff --git a/assets/images/emoji/rage1.png b/assets/images/emoji/rage1.png new file mode 100644 index 00000000..d4d84679 Binary files /dev/null and b/assets/images/emoji/rage1.png differ diff --git a/assets/images/emoji/rage2.png b/assets/images/emoji/rage2.png new file mode 100644 index 00000000..0cd7052c Binary files /dev/null and b/assets/images/emoji/rage2.png differ diff --git a/assets/images/emoji/rage3.png b/assets/images/emoji/rage3.png new file mode 100644 index 00000000..340ad870 Binary files /dev/null and b/assets/images/emoji/rage3.png differ diff --git a/assets/images/emoji/rage4.png b/assets/images/emoji/rage4.png new file mode 100644 index 00000000..6e6c1238 Binary files /dev/null and b/assets/images/emoji/rage4.png differ diff --git a/assets/images/emoji/rainbow.png b/assets/images/emoji/rainbow.png new file mode 100644 index 00000000..4b150bd5 Binary files /dev/null and b/assets/images/emoji/rainbow.png differ diff --git a/assets/images/emoji/raised_hands.png b/assets/images/emoji/raised_hands.png new file mode 100644 index 00000000..f9f2a95f Binary files /dev/null and b/assets/images/emoji/raised_hands.png differ diff --git a/assets/images/emoji/ramen.png b/assets/images/emoji/ramen.png new file mode 100644 index 00000000..c6524f3e Binary files /dev/null and b/assets/images/emoji/ramen.png differ diff --git a/assets/images/emoji/red_car.png b/assets/images/emoji/red_car.png new file mode 100644 index 00000000..c8bc8020 Binary files /dev/null and b/assets/images/emoji/red_car.png differ diff --git a/assets/images/emoji/red_circle.png b/assets/images/emoji/red_circle.png new file mode 100644 index 00000000..ef13dc4a Binary files /dev/null and b/assets/images/emoji/red_circle.png differ diff --git a/assets/images/emoji/registered.png b/assets/images/emoji/registered.png new file mode 100644 index 00000000..dcecc555 Binary files /dev/null and b/assets/images/emoji/registered.png differ diff --git a/assets/images/emoji/relaxed.png b/assets/images/emoji/relaxed.png new file mode 100644 index 00000000..4b8412cd Binary files /dev/null and b/assets/images/emoji/relaxed.png differ diff --git a/assets/images/emoji/relieved.png b/assets/images/emoji/relieved.png new file mode 100644 index 00000000..e9405da0 Binary files /dev/null and b/assets/images/emoji/relieved.png differ diff --git a/assets/images/emoji/restroom.png b/assets/images/emoji/restroom.png new file mode 100644 index 00000000..612eccda Binary files /dev/null and b/assets/images/emoji/restroom.png differ diff --git a/assets/images/emoji/rewind.png b/assets/images/emoji/rewind.png new file mode 100644 index 00000000..3997771b Binary files /dev/null and b/assets/images/emoji/rewind.png differ diff --git a/assets/images/emoji/ribbon.png b/assets/images/emoji/ribbon.png new file mode 100644 index 00000000..b7281b0f Binary files /dev/null and b/assets/images/emoji/ribbon.png differ diff --git a/assets/images/emoji/rice.png b/assets/images/emoji/rice.png new file mode 100644 index 00000000..13ce2747 Binary files /dev/null and b/assets/images/emoji/rice.png differ diff --git a/assets/images/emoji/rice_ball.png b/assets/images/emoji/rice_ball.png new file mode 100644 index 00000000..084660ef Binary files /dev/null and b/assets/images/emoji/rice_ball.png differ diff --git a/assets/images/emoji/rice_cracker.png b/assets/images/emoji/rice_cracker.png new file mode 100644 index 00000000..3f7cbffc Binary files /dev/null and b/assets/images/emoji/rice_cracker.png differ diff --git a/assets/images/emoji/rice_scene.png b/assets/images/emoji/rice_scene.png new file mode 100644 index 00000000..ce41fe81 Binary files /dev/null and b/assets/images/emoji/rice_scene.png differ diff --git a/assets/images/emoji/ring.png b/assets/images/emoji/ring.png new file mode 100644 index 00000000..0fd547aa Binary files /dev/null and b/assets/images/emoji/ring.png differ diff --git a/assets/images/emoji/rocket.png b/assets/images/emoji/rocket.png new file mode 100644 index 00000000..4b52a2e6 Binary files /dev/null and b/assets/images/emoji/rocket.png differ diff --git a/assets/images/emoji/roller_coaster.png b/assets/images/emoji/roller_coaster.png new file mode 100644 index 00000000..d33d7c54 Binary files /dev/null and b/assets/images/emoji/roller_coaster.png differ diff --git a/assets/images/emoji/rose.png b/assets/images/emoji/rose.png new file mode 100644 index 00000000..d28df9eb Binary files /dev/null and b/assets/images/emoji/rose.png differ diff --git a/assets/images/emoji/ru.png b/assets/images/emoji/ru.png new file mode 100644 index 00000000..1fefb2ca Binary files /dev/null and b/assets/images/emoji/ru.png differ diff --git a/assets/images/emoji/runner.png b/assets/images/emoji/runner.png new file mode 100644 index 00000000..a2c78f55 Binary files /dev/null and b/assets/images/emoji/runner.png differ diff --git a/assets/images/emoji/sa.png b/assets/images/emoji/sa.png new file mode 100644 index 00000000..82a27c7a Binary files /dev/null and b/assets/images/emoji/sa.png differ diff --git a/assets/images/emoji/sagittarius.png b/assets/images/emoji/sagittarius.png new file mode 100644 index 00000000..8c14a431 Binary files /dev/null and b/assets/images/emoji/sagittarius.png differ diff --git a/assets/images/emoji/sailboat.png b/assets/images/emoji/sailboat.png new file mode 100644 index 00000000..8084f0e5 Binary files /dev/null and b/assets/images/emoji/sailboat.png differ diff --git a/assets/images/emoji/sake.png b/assets/images/emoji/sake.png new file mode 100644 index 00000000..ce544d72 Binary files /dev/null and b/assets/images/emoji/sake.png differ diff --git a/assets/images/emoji/sandal.png b/assets/images/emoji/sandal.png new file mode 100644 index 00000000..4f740a33 Binary files /dev/null and b/assets/images/emoji/sandal.png differ diff --git a/assets/images/emoji/santa.png b/assets/images/emoji/santa.png new file mode 100644 index 00000000..c753675e Binary files /dev/null and b/assets/images/emoji/santa.png differ diff --git a/assets/images/emoji/satellite.png b/assets/images/emoji/satellite.png new file mode 100644 index 00000000..d3f07107 Binary files /dev/null and b/assets/images/emoji/satellite.png differ diff --git a/assets/images/emoji/satisfied.png b/assets/images/emoji/satisfied.png new file mode 100644 index 00000000..f68006dd Binary files /dev/null and b/assets/images/emoji/satisfied.png differ diff --git a/assets/images/emoji/saxophone.png b/assets/images/emoji/saxophone.png new file mode 100644 index 00000000..ac27b0de Binary files /dev/null and b/assets/images/emoji/saxophone.png differ diff --git a/assets/images/emoji/school.png b/assets/images/emoji/school.png new file mode 100644 index 00000000..bdc0fa00 Binary files /dev/null and b/assets/images/emoji/school.png differ diff --git a/assets/images/emoji/school_satchel.png b/assets/images/emoji/school_satchel.png new file mode 100644 index 00000000..ba7925e4 Binary files /dev/null and b/assets/images/emoji/school_satchel.png differ diff --git a/assets/images/emoji/scissors.png b/assets/images/emoji/scissors.png new file mode 100644 index 00000000..77b38148 Binary files /dev/null and b/assets/images/emoji/scissors.png differ diff --git a/assets/images/emoji/scorpius.png b/assets/images/emoji/scorpius.png new file mode 100644 index 00000000..69734fa0 Binary files /dev/null and b/assets/images/emoji/scorpius.png differ diff --git a/assets/images/emoji/scream.png b/assets/images/emoji/scream.png new file mode 100644 index 00000000..222aae8d Binary files /dev/null and b/assets/images/emoji/scream.png differ diff --git a/assets/images/emoji/seat.png b/assets/images/emoji/seat.png new file mode 100644 index 00000000..9d7311a8 Binary files /dev/null and b/assets/images/emoji/seat.png differ diff --git a/assets/images/emoji/secret.png b/assets/images/emoji/secret.png new file mode 100644 index 00000000..26b63912 Binary files /dev/null and b/assets/images/emoji/secret.png differ diff --git a/assets/images/emoji/shaved_ice.png b/assets/images/emoji/shaved_ice.png new file mode 100644 index 00000000..a8f6833b Binary files /dev/null and b/assets/images/emoji/shaved_ice.png differ diff --git a/assets/images/emoji/sheep.png b/assets/images/emoji/sheep.png new file mode 100644 index 00000000..7ca93eaf Binary files /dev/null and b/assets/images/emoji/sheep.png differ diff --git a/assets/images/emoji/shell.png b/assets/images/emoji/shell.png new file mode 100644 index 00000000..d2892f08 Binary files /dev/null and b/assets/images/emoji/shell.png differ diff --git a/assets/images/emoji/ship.png b/assets/images/emoji/ship.png new file mode 100644 index 00000000..7b709089 Binary files /dev/null and b/assets/images/emoji/ship.png differ diff --git a/assets/images/emoji/shipit.png b/assets/images/emoji/shipit.png new file mode 100644 index 00000000..5097004b Binary files /dev/null and b/assets/images/emoji/shipit.png differ diff --git a/assets/images/emoji/shirt.png b/assets/images/emoji/shirt.png new file mode 100644 index 00000000..591b55bf Binary files /dev/null and b/assets/images/emoji/shirt.png differ diff --git a/assets/images/emoji/shit.png b/assets/images/emoji/shit.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/assets/images/emoji/shit.png differ diff --git a/assets/images/emoji/shoe.png b/assets/images/emoji/shoe.png new file mode 100644 index 00000000..3771bfb6 Binary files /dev/null and b/assets/images/emoji/shoe.png differ diff --git a/assets/images/emoji/signal_strength.png b/assets/images/emoji/signal_strength.png new file mode 100644 index 00000000..05d422c1 Binary files /dev/null and b/assets/images/emoji/signal_strength.png differ diff --git a/assets/images/emoji/six_pointed_star.png b/assets/images/emoji/six_pointed_star.png new file mode 100644 index 00000000..28e49230 Binary files /dev/null and b/assets/images/emoji/six_pointed_star.png differ diff --git a/assets/images/emoji/ski.png b/assets/images/emoji/ski.png new file mode 100644 index 00000000..e8d54f58 Binary files /dev/null and b/assets/images/emoji/ski.png differ diff --git a/assets/images/emoji/skull.png b/assets/images/emoji/skull.png new file mode 100644 index 00000000..d29156dc Binary files /dev/null and b/assets/images/emoji/skull.png differ diff --git a/assets/images/emoji/sleepy.png b/assets/images/emoji/sleepy.png new file mode 100644 index 00000000..e607a0ca Binary files /dev/null and b/assets/images/emoji/sleepy.png differ diff --git a/assets/images/emoji/slot_machine.png b/assets/images/emoji/slot_machine.png new file mode 100644 index 00000000..7a98d229 Binary files /dev/null and b/assets/images/emoji/slot_machine.png differ diff --git a/assets/images/emoji/smile.png b/assets/images/emoji/smile.png new file mode 100644 index 00000000..636390ec Binary files /dev/null and b/assets/images/emoji/smile.png differ diff --git a/assets/images/emoji/smiley.png b/assets/images/emoji/smiley.png new file mode 100644 index 00000000..6c4ef119 Binary files /dev/null and b/assets/images/emoji/smiley.png differ diff --git a/assets/images/emoji/smirk.png b/assets/images/emoji/smirk.png new file mode 100644 index 00000000..57a69306 Binary files /dev/null and b/assets/images/emoji/smirk.png differ diff --git a/assets/images/emoji/smoking.png b/assets/images/emoji/smoking.png new file mode 100644 index 00000000..c7c39a12 Binary files /dev/null and b/assets/images/emoji/smoking.png differ diff --git a/assets/images/emoji/snake.png b/assets/images/emoji/snake.png new file mode 100644 index 00000000..b8e2e241 Binary files /dev/null and b/assets/images/emoji/snake.png differ diff --git a/assets/images/emoji/snowman.png b/assets/images/emoji/snowman.png new file mode 100644 index 00000000..0daf91c1 Binary files /dev/null and b/assets/images/emoji/snowman.png differ diff --git a/assets/images/emoji/sob.png b/assets/images/emoji/sob.png new file mode 100644 index 00000000..079a944f Binary files /dev/null and b/assets/images/emoji/sob.png differ diff --git a/assets/images/emoji/soccer.png b/assets/images/emoji/soccer.png new file mode 100644 index 00000000..fe4a6759 Binary files /dev/null and b/assets/images/emoji/soccer.png differ diff --git a/assets/images/emoji/space_invader.png b/assets/images/emoji/space_invader.png new file mode 100644 index 00000000..3c7804c7 Binary files /dev/null and b/assets/images/emoji/space_invader.png differ diff --git a/assets/images/emoji/spades.png b/assets/images/emoji/spades.png new file mode 100644 index 00000000..17084df6 Binary files /dev/null and b/assets/images/emoji/spades.png differ diff --git a/assets/images/emoji/spaghetti.png b/assets/images/emoji/spaghetti.png new file mode 100644 index 00000000..8aec1011 Binary files /dev/null and b/assets/images/emoji/spaghetti.png differ diff --git a/assets/images/emoji/sparkler.png b/assets/images/emoji/sparkler.png new file mode 100644 index 00000000..306e0c59 Binary files /dev/null and b/assets/images/emoji/sparkler.png differ diff --git a/assets/images/emoji/sparkles.png b/assets/images/emoji/sparkles.png new file mode 100644 index 00000000..db6afa96 Binary files /dev/null and b/assets/images/emoji/sparkles.png differ diff --git a/assets/images/emoji/speaker.png b/assets/images/emoji/speaker.png new file mode 100644 index 00000000..ad245cfe Binary files /dev/null and b/assets/images/emoji/speaker.png differ diff --git a/assets/images/emoji/speedboat.png b/assets/images/emoji/speedboat.png new file mode 100644 index 00000000..9af4c3ba Binary files /dev/null and b/assets/images/emoji/speedboat.png differ diff --git a/assets/images/emoji/squirrel.png b/assets/images/emoji/squirrel.png new file mode 100644 index 00000000..5097004b Binary files /dev/null and b/assets/images/emoji/squirrel.png differ diff --git a/assets/images/emoji/star.png b/assets/images/emoji/star.png new file mode 100644 index 00000000..7ca7067b Binary files /dev/null and b/assets/images/emoji/star.png differ diff --git a/assets/images/emoji/star2.png b/assets/images/emoji/star2.png new file mode 100644 index 00000000..94f9ceb4 Binary files /dev/null and b/assets/images/emoji/star2.png differ diff --git a/assets/images/emoji/stars.png b/assets/images/emoji/stars.png new file mode 100644 index 00000000..3c9c684c Binary files /dev/null and b/assets/images/emoji/stars.png differ diff --git a/assets/images/emoji/station.png b/assets/images/emoji/station.png new file mode 100644 index 00000000..70fdf630 Binary files /dev/null and b/assets/images/emoji/station.png differ diff --git a/assets/images/emoji/statue_of_liberty.png b/assets/images/emoji/statue_of_liberty.png new file mode 100644 index 00000000..a5212907 Binary files /dev/null and b/assets/images/emoji/statue_of_liberty.png differ diff --git a/assets/images/emoji/stew.png b/assets/images/emoji/stew.png new file mode 100644 index 00000000..7168767d Binary files /dev/null and b/assets/images/emoji/stew.png differ diff --git a/assets/images/emoji/strawberry.png b/assets/images/emoji/strawberry.png new file mode 100644 index 00000000..ac74fb83 Binary files /dev/null and b/assets/images/emoji/strawberry.png differ diff --git a/assets/images/emoji/sunflower.png b/assets/images/emoji/sunflower.png new file mode 100644 index 00000000..9eae979e Binary files /dev/null and b/assets/images/emoji/sunflower.png differ diff --git a/assets/images/emoji/sunny.png b/assets/images/emoji/sunny.png new file mode 100644 index 00000000..81a412dd Binary files /dev/null and b/assets/images/emoji/sunny.png differ diff --git a/assets/images/emoji/sunrise.png b/assets/images/emoji/sunrise.png new file mode 100644 index 00000000..4822140b Binary files /dev/null and b/assets/images/emoji/sunrise.png differ diff --git a/assets/images/emoji/sunrise_over_mountains.png b/assets/images/emoji/sunrise_over_mountains.png new file mode 100644 index 00000000..ea3fa19a Binary files /dev/null and b/assets/images/emoji/sunrise_over_mountains.png differ diff --git a/assets/images/emoji/surfer.png b/assets/images/emoji/surfer.png new file mode 100644 index 00000000..27248dc6 Binary files /dev/null and b/assets/images/emoji/surfer.png differ diff --git a/assets/images/emoji/sushi.png b/assets/images/emoji/sushi.png new file mode 100644 index 00000000..135e3633 Binary files /dev/null and b/assets/images/emoji/sushi.png differ diff --git a/assets/images/emoji/suspect.png b/assets/images/emoji/suspect.png new file mode 100644 index 00000000..d96e0bc7 Binary files /dev/null and b/assets/images/emoji/suspect.png differ diff --git a/assets/images/emoji/sweat.png b/assets/images/emoji/sweat.png new file mode 100644 index 00000000..d7179708 Binary files /dev/null and b/assets/images/emoji/sweat.png differ diff --git a/assets/images/emoji/sweat_drops.png b/assets/images/emoji/sweat_drops.png new file mode 100644 index 00000000..2c4ac5c6 Binary files /dev/null and b/assets/images/emoji/sweat_drops.png differ diff --git a/assets/images/emoji/swimmer.png b/assets/images/emoji/swimmer.png new file mode 100644 index 00000000..d384f95c Binary files /dev/null and b/assets/images/emoji/swimmer.png differ diff --git a/assets/images/emoji/syringe.png b/assets/images/emoji/syringe.png new file mode 100644 index 00000000..c066625d Binary files /dev/null and b/assets/images/emoji/syringe.png differ diff --git a/assets/images/emoji/tada.png b/assets/images/emoji/tada.png new file mode 100644 index 00000000..78c674fd Binary files /dev/null and b/assets/images/emoji/tada.png differ diff --git a/assets/images/emoji/tangerine.png b/assets/images/emoji/tangerine.png new file mode 100644 index 00000000..ad2f3d48 Binary files /dev/null and b/assets/images/emoji/tangerine.png differ diff --git a/assets/images/emoji/taurus.png b/assets/images/emoji/taurus.png new file mode 100644 index 00000000..86bbf864 Binary files /dev/null and b/assets/images/emoji/taurus.png differ diff --git a/assets/images/emoji/taxi.png b/assets/images/emoji/taxi.png new file mode 100644 index 00000000..0e74be12 Binary files /dev/null and b/assets/images/emoji/taxi.png differ diff --git a/assets/images/emoji/tea.png b/assets/images/emoji/tea.png new file mode 100644 index 00000000..a323e485 Binary files /dev/null and b/assets/images/emoji/tea.png differ diff --git a/assets/images/emoji/telephone.png b/assets/images/emoji/telephone.png new file mode 100644 index 00000000..e1d64368 Binary files /dev/null and b/assets/images/emoji/telephone.png differ diff --git a/assets/images/emoji/tennis.png b/assets/images/emoji/tennis.png new file mode 100644 index 00000000..18559da3 Binary files /dev/null and b/assets/images/emoji/tennis.png differ diff --git a/assets/images/emoji/tent.png b/assets/images/emoji/tent.png new file mode 100644 index 00000000..452aebda Binary files /dev/null and b/assets/images/emoji/tent.png differ diff --git a/assets/images/emoji/thumbsdown.png b/assets/images/emoji/thumbsdown.png new file mode 100644 index 00000000..6f757ba8 Binary files /dev/null and b/assets/images/emoji/thumbsdown.png differ diff --git a/assets/images/emoji/thumbsup.png b/assets/images/emoji/thumbsup.png new file mode 100644 index 00000000..4dae7a09 Binary files /dev/null and b/assets/images/emoji/thumbsup.png differ diff --git a/assets/images/emoji/ticket.png b/assets/images/emoji/ticket.png new file mode 100644 index 00000000..c926699b Binary files /dev/null and b/assets/images/emoji/ticket.png differ diff --git a/assets/images/emoji/tiger.png b/assets/images/emoji/tiger.png new file mode 100644 index 00000000..1f44a975 Binary files /dev/null and b/assets/images/emoji/tiger.png differ diff --git a/assets/images/emoji/tm.png b/assets/images/emoji/tm.png new file mode 100644 index 00000000..202ec305 Binary files /dev/null and b/assets/images/emoji/tm.png differ diff --git a/assets/images/emoji/toilet.png b/assets/images/emoji/toilet.png new file mode 100644 index 00000000..18147e6d Binary files /dev/null and b/assets/images/emoji/toilet.png differ diff --git a/assets/images/emoji/tokyo_tower.png b/assets/images/emoji/tokyo_tower.png new file mode 100644 index 00000000..b2712ac9 Binary files /dev/null and b/assets/images/emoji/tokyo_tower.png differ diff --git a/assets/images/emoji/tomato.png b/assets/images/emoji/tomato.png new file mode 100644 index 00000000..b2f14ece Binary files /dev/null and b/assets/images/emoji/tomato.png differ diff --git a/assets/images/emoji/tongue.png b/assets/images/emoji/tongue.png new file mode 100644 index 00000000..1b76e224 Binary files /dev/null and b/assets/images/emoji/tongue.png differ diff --git a/assets/images/emoji/top.png b/assets/images/emoji/top.png new file mode 100644 index 00000000..3a4f2cd1 Binary files /dev/null and b/assets/images/emoji/top.png differ diff --git a/assets/images/emoji/tophat.png b/assets/images/emoji/tophat.png new file mode 100644 index 00000000..f12f2321 Binary files /dev/null and b/assets/images/emoji/tophat.png differ diff --git a/assets/images/emoji/traffic_light.png b/assets/images/emoji/traffic_light.png new file mode 100644 index 00000000..c15a6442 Binary files /dev/null and b/assets/images/emoji/traffic_light.png differ diff --git a/assets/images/emoji/train.png b/assets/images/emoji/train.png new file mode 100644 index 00000000..26288046 Binary files /dev/null and b/assets/images/emoji/train.png differ diff --git a/assets/images/emoji/trident.png b/assets/images/emoji/trident.png new file mode 100644 index 00000000..900a5a4d Binary files /dev/null and b/assets/images/emoji/trident.png differ diff --git a/assets/images/emoji/trophy.png b/assets/images/emoji/trophy.png new file mode 100644 index 00000000..39177993 Binary files /dev/null and b/assets/images/emoji/trophy.png differ diff --git a/assets/images/emoji/tropical_fish.png b/assets/images/emoji/tropical_fish.png new file mode 100644 index 00000000..fcaefe85 Binary files /dev/null and b/assets/images/emoji/tropical_fish.png differ diff --git a/assets/images/emoji/truck.png b/assets/images/emoji/truck.png new file mode 100644 index 00000000..d346efd0 Binary files /dev/null and b/assets/images/emoji/truck.png differ diff --git a/assets/images/emoji/trumpet.png b/assets/images/emoji/trumpet.png new file mode 100644 index 00000000..e98f5b76 Binary files /dev/null and b/assets/images/emoji/trumpet.png differ diff --git a/assets/images/emoji/tshirt.png b/assets/images/emoji/tshirt.png new file mode 100644 index 00000000..591b55bf Binary files /dev/null and b/assets/images/emoji/tshirt.png differ diff --git a/assets/images/emoji/tulip.png b/assets/images/emoji/tulip.png new file mode 100644 index 00000000..1f20c543 Binary files /dev/null and b/assets/images/emoji/tulip.png differ diff --git a/assets/images/emoji/tv.png b/assets/images/emoji/tv.png new file mode 100644 index 00000000..90b80974 Binary files /dev/null and b/assets/images/emoji/tv.png differ diff --git a/assets/images/emoji/u5272.png b/assets/images/emoji/u5272.png new file mode 100644 index 00000000..6ce43a06 Binary files /dev/null and b/assets/images/emoji/u5272.png differ diff --git a/assets/images/emoji/u55b6.png b/assets/images/emoji/u55b6.png new file mode 100644 index 00000000..d10e0764 Binary files /dev/null and b/assets/images/emoji/u55b6.png differ diff --git a/assets/images/emoji/u6307.png b/assets/images/emoji/u6307.png new file mode 100644 index 00000000..d185ca7a Binary files /dev/null and b/assets/images/emoji/u6307.png differ diff --git a/assets/images/emoji/u6708.png b/assets/images/emoji/u6708.png new file mode 100644 index 00000000..ab493e4f Binary files /dev/null and b/assets/images/emoji/u6708.png differ diff --git a/assets/images/emoji/u6709.png b/assets/images/emoji/u6709.png new file mode 100644 index 00000000..0287b16a Binary files /dev/null and b/assets/images/emoji/u6709.png differ diff --git a/assets/images/emoji/u6e80.png b/assets/images/emoji/u6e80.png new file mode 100644 index 00000000..90dd116d Binary files /dev/null and b/assets/images/emoji/u6e80.png differ diff --git a/assets/images/emoji/u7121.png b/assets/images/emoji/u7121.png new file mode 100644 index 00000000..9ff16c51 Binary files /dev/null and b/assets/images/emoji/u7121.png differ diff --git a/assets/images/emoji/u7533.png b/assets/images/emoji/u7533.png new file mode 100644 index 00000000..7efbd9d8 Binary files /dev/null and b/assets/images/emoji/u7533.png differ diff --git a/assets/images/emoji/u7a7a.png b/assets/images/emoji/u7a7a.png new file mode 100644 index 00000000..eb9774e1 Binary files /dev/null and b/assets/images/emoji/u7a7a.png differ diff --git a/assets/images/emoji/umbrella.png b/assets/images/emoji/umbrella.png new file mode 100644 index 00000000..a6d3890e Binary files /dev/null and b/assets/images/emoji/umbrella.png differ diff --git a/assets/images/emoji/unamused.png b/assets/images/emoji/unamused.png new file mode 100644 index 00000000..234c9c08 Binary files /dev/null and b/assets/images/emoji/unamused.png differ diff --git a/assets/images/emoji/underage.png b/assets/images/emoji/underage.png new file mode 100644 index 00000000..ae3a771d Binary files /dev/null and b/assets/images/emoji/underage.png differ diff --git a/assets/images/emoji/unlock.png b/assets/images/emoji/unlock.png new file mode 100644 index 00000000..b664853f Binary files /dev/null and b/assets/images/emoji/unlock.png differ diff --git a/assets/images/emoji/up.png b/assets/images/emoji/up.png new file mode 100644 index 00000000..b065186e Binary files /dev/null and b/assets/images/emoji/up.png differ diff --git a/assets/images/emoji/us.png b/assets/images/emoji/us.png new file mode 100644 index 00000000..97323c7d Binary files /dev/null and b/assets/images/emoji/us.png differ diff --git a/assets/images/emoji/v.png b/assets/images/emoji/v.png new file mode 100644 index 00000000..e9cc8dc8 Binary files /dev/null and b/assets/images/emoji/v.png differ diff --git a/assets/images/emoji/vhs.png b/assets/images/emoji/vhs.png new file mode 100644 index 00000000..34027fb2 Binary files /dev/null and b/assets/images/emoji/vhs.png differ diff --git a/assets/images/emoji/vibration_mode.png b/assets/images/emoji/vibration_mode.png new file mode 100644 index 00000000..7d9b811b Binary files /dev/null and b/assets/images/emoji/vibration_mode.png differ diff --git a/assets/images/emoji/virgo.png b/assets/images/emoji/virgo.png new file mode 100644 index 00000000..37219d75 Binary files /dev/null and b/assets/images/emoji/virgo.png differ diff --git a/assets/images/emoji/vs.png b/assets/images/emoji/vs.png new file mode 100644 index 00000000..da838c3f Binary files /dev/null and b/assets/images/emoji/vs.png differ diff --git a/assets/images/emoji/walking.png b/assets/images/emoji/walking.png new file mode 100644 index 00000000..4c7501fa Binary files /dev/null and b/assets/images/emoji/walking.png differ diff --git a/assets/images/emoji/warning.png b/assets/images/emoji/warning.png new file mode 100644 index 00000000..d2de14ce Binary files /dev/null and b/assets/images/emoji/warning.png differ diff --git a/assets/images/emoji/watermelon.png b/assets/images/emoji/watermelon.png new file mode 100644 index 00000000..af8e3aca Binary files /dev/null and b/assets/images/emoji/watermelon.png differ diff --git a/assets/images/emoji/wave.png b/assets/images/emoji/wave.png new file mode 100644 index 00000000..17641964 Binary files /dev/null and b/assets/images/emoji/wave.png differ diff --git a/assets/images/emoji/wc.png b/assets/images/emoji/wc.png new file mode 100644 index 00000000..27125f19 Binary files /dev/null and b/assets/images/emoji/wc.png differ diff --git a/assets/images/emoji/wedding.png b/assets/images/emoji/wedding.png new file mode 100644 index 00000000..75bbf800 Binary files /dev/null and b/assets/images/emoji/wedding.png differ diff --git a/assets/images/emoji/whale.png b/assets/images/emoji/whale.png new file mode 100644 index 00000000..43b319a7 Binary files /dev/null and b/assets/images/emoji/whale.png differ diff --git a/assets/images/emoji/wheelchair.png b/assets/images/emoji/wheelchair.png new file mode 100644 index 00000000..6d53c499 Binary files /dev/null and b/assets/images/emoji/wheelchair.png differ diff --git a/assets/images/emoji/white_square.png b/assets/images/emoji/white_square.png new file mode 100644 index 00000000..65b56745 Binary files /dev/null and b/assets/images/emoji/white_square.png differ diff --git a/assets/images/emoji/wind_chime.png b/assets/images/emoji/wind_chime.png new file mode 100644 index 00000000..5de30d7f Binary files /dev/null and b/assets/images/emoji/wind_chime.png differ diff --git a/assets/images/emoji/wink.png b/assets/images/emoji/wink.png new file mode 100644 index 00000000..9d593b88 Binary files /dev/null and b/assets/images/emoji/wink.png differ diff --git a/assets/images/emoji/wink2.png b/assets/images/emoji/wink2.png new file mode 100644 index 00000000..3d1b442a Binary files /dev/null and b/assets/images/emoji/wink2.png differ diff --git a/assets/images/emoji/wolf.png b/assets/images/emoji/wolf.png new file mode 100644 index 00000000..f1969e6b Binary files /dev/null and b/assets/images/emoji/wolf.png differ diff --git a/assets/images/emoji/woman.png b/assets/images/emoji/woman.png new file mode 100644 index 00000000..b052f4fa Binary files /dev/null and b/assets/images/emoji/woman.png differ diff --git a/assets/images/emoji/womans_hat.png b/assets/images/emoji/womans_hat.png new file mode 100644 index 00000000..0afbe823 Binary files /dev/null and b/assets/images/emoji/womans_hat.png differ diff --git a/assets/images/emoji/womens.png b/assets/images/emoji/womens.png new file mode 100644 index 00000000..83deabfa Binary files /dev/null and b/assets/images/emoji/womens.png differ diff --git a/assets/images/emoji/x.png b/assets/images/emoji/x.png new file mode 100644 index 00000000..a2b46bfc Binary files /dev/null and b/assets/images/emoji/x.png differ diff --git a/assets/images/emoji/yellow_heart.png b/assets/images/emoji/yellow_heart.png new file mode 100644 index 00000000..409cc176 Binary files /dev/null and b/assets/images/emoji/yellow_heart.png differ diff --git a/assets/images/emoji/zap.png b/assets/images/emoji/zap.png new file mode 100644 index 00000000..d3dd89f6 Binary files /dev/null and b/assets/images/emoji/zap.png differ diff --git a/assets/images/emoji/zzz.png b/assets/images/emoji/zzz.png new file mode 100644 index 00000000..55e31ae1 Binary files /dev/null and b/assets/images/emoji/zzz.png differ diff --git a/assets/images/facebox/closelabel.png b/assets/images/facebox/closelabel.png new file mode 100755 index 00000000..c339e593 Binary files /dev/null and b/assets/images/facebox/closelabel.png differ diff --git a/assets/images/facebox/loading.gif b/assets/images/facebox/loading.gif new file mode 100755 index 00000000..f864d5fd Binary files /dev/null and b/assets/images/facebox/loading.gif differ diff --git a/assets/images/icons/add.png b/assets/images/icons/add.png new file mode 100644 index 00000000..e2b66ea9 Binary files /dev/null and b/assets/images/icons/add.png differ diff --git a/assets/images/icons/construction.png b/assets/images/icons/construction.png new file mode 100644 index 00000000..066a34c5 Binary files /dev/null and b/assets/images/icons/construction.png differ diff --git a/assets/images/icons/github-admin.png b/assets/images/icons/github-admin.png new file mode 100644 index 00000000..548a56e0 Binary files /dev/null and b/assets/images/icons/github-admin.png differ diff --git a/assets/images/icons/github-forks.png b/assets/images/icons/github-forks.png new file mode 100644 index 00000000..04d17ca8 Binary files /dev/null and b/assets/images/icons/github-forks.png differ diff --git a/assets/images/icons/github-watchers.png b/assets/images/icons/github-watchers.png new file mode 100644 index 00000000..9dd04891 Binary files /dev/null and b/assets/images/icons/github-watchers.png differ diff --git a/assets/images/icons/help.png b/assets/images/icons/help.png new file mode 100644 index 00000000..5c870176 Binary files /dev/null and b/assets/images/icons/help.png differ diff --git a/assets/images/icons/log.fold.closed.2.png b/assets/images/icons/log.fold.closed.2.png new file mode 100644 index 00000000..a1a8765c Binary files /dev/null and b/assets/images/icons/log.fold.closed.2.png differ diff --git a/assets/images/icons/log.fold.closed.png b/assets/images/icons/log.fold.closed.png new file mode 100644 index 00000000..42a2700c Binary files /dev/null and b/assets/images/icons/log.fold.closed.png differ diff --git a/assets/images/icons/log.fold.open.2.png b/assets/images/icons/log.fold.open.2.png new file mode 100644 index 00000000..fc18158c Binary files /dev/null and b/assets/images/icons/log.fold.open.2.png differ diff --git a/assets/images/icons/log.fold.open.png b/assets/images/icons/log.fold.open.png new file mode 100644 index 00000000..184c862f Binary files /dev/null and b/assets/images/icons/log.fold.open.png differ diff --git a/assets/images/icons/search.png b/assets/images/icons/search.png new file mode 100644 index 00000000..b928383e Binary files /dev/null and b/assets/images/icons/search.png differ diff --git a/assets/images/icons/smile.png b/assets/images/icons/smile.png new file mode 100644 index 00000000..963a3dad Binary files /dev/null and b/assets/images/icons/smile.png differ diff --git a/assets/images/icons/status.green.png b/assets/images/icons/status.green.png new file mode 100644 index 00000000..bc6aa8fe Binary files /dev/null and b/assets/images/icons/status.green.png differ diff --git a/assets/images/icons/status.red.png b/assets/images/icons/status.red.png new file mode 100644 index 00000000..bdb6d63c Binary files /dev/null and b/assets/images/icons/status.red.png differ diff --git a/assets/images/icons/status.square.gray.png b/assets/images/icons/status.square.gray.png new file mode 100644 index 00000000..bf2f9cea Binary files /dev/null and b/assets/images/icons/status.square.gray.png differ diff --git a/assets/images/icons/status.square.green.png b/assets/images/icons/status.square.green.png new file mode 100644 index 00000000..0b9489eb Binary files /dev/null and b/assets/images/icons/status.square.green.png differ diff --git a/assets/images/icons/status.square.red.png b/assets/images/icons/status.square.red.png new file mode 100644 index 00000000..c9e6ec9a Binary files /dev/null and b/assets/images/icons/status.square.red.png differ diff --git a/assets/images/icons/status.square.yellow.png b/assets/images/icons/status.square.yellow.png new file mode 100644 index 00000000..d0250312 Binary files /dev/null and b/assets/images/icons/status.square.yellow.png differ diff --git a/assets/images/icons/status.yellow.png b/assets/images/icons/status.yellow.png new file mode 100644 index 00000000..0f6d5b3a Binary files /dev/null and b/assets/images/icons/status.yellow.png differ diff --git a/assets/images/icons/wrench.png b/assets/images/icons/wrench.png new file mode 100644 index 00000000..cd572126 Binary files /dev/null and b/assets/images/icons/wrench.png differ diff --git a/assets/images/rails.png b/assets/images/rails.png deleted file mode 100644 index d5edc04e..00000000 Binary files a/assets/images/rails.png and /dev/null differ diff --git a/assets/images/spinner.gif b/assets/images/spinner.gif new file mode 100644 index 00000000..e7eb4cb1 Binary files /dev/null and b/assets/images/spinner.gif differ diff --git a/assets/images/sponsors/5apps-205x60.png b/assets/images/sponsors/5apps-205x60.png new file mode 100644 index 00000000..18b8d336 Binary files /dev/null and b/assets/images/sponsors/5apps-205x60.png differ diff --git a/assets/images/sponsors/8thlight-205x60.jpg b/assets/images/sponsors/8thlight-205x60.jpg new file mode 100644 index 00000000..4783a5c2 Binary files /dev/null and b/assets/images/sponsors/8thlight-205x60.jpg differ diff --git a/assets/images/sponsors/agileanimal-205x60.png b/assets/images/sponsors/agileanimal-205x60.png new file mode 100644 index 00000000..1c53f966 Binary files /dev/null and b/assets/images/sponsors/agileanimal-205x60.png differ diff --git a/assets/images/sponsors/amen-205x60.jpg b/assets/images/sponsors/amen-205x60.jpg new file mode 100644 index 00000000..c2ed536c Binary files /dev/null and b/assets/images/sponsors/amen-205x60.jpg differ diff --git a/assets/images/sponsors/atomicobject-205x60.png b/assets/images/sponsors/atomicobject-205x60.png new file mode 100644 index 00000000..62166365 Binary files /dev/null and b/assets/images/sponsors/atomicobject-205x60.png differ diff --git a/assets/images/sponsors/avarteq-140x40.png b/assets/images/sponsors/avarteq-140x40.png new file mode 100644 index 00000000..e13e0143 Binary files /dev/null and b/assets/images/sponsors/avarteq-140x40.png differ diff --git a/assets/images/sponsors/basho-205x60.png b/assets/images/sponsors/basho-205x60.png new file mode 100644 index 00000000..8d95c094 Binary files /dev/null and b/assets/images/sponsors/basho-205x60.png differ diff --git a/assets/images/sponsors/bendyworks-100x60.png b/assets/images/sponsors/bendyworks-100x60.png new file mode 100644 index 00000000..9c98b7e7 Binary files /dev/null and b/assets/images/sponsors/bendyworks-100x60.png differ diff --git a/assets/images/sponsors/bendyworks-205x130.png b/assets/images/sponsors/bendyworks-205x130.png new file mode 100644 index 00000000..c8654cd0 Binary files /dev/null and b/assets/images/sponsors/bendyworks-205x130.png differ diff --git a/assets/images/sponsors/bendyworks-210x210.png b/assets/images/sponsors/bendyworks-210x210.png new file mode 100644 index 00000000..4ce673df Binary files /dev/null and b/assets/images/sponsors/bendyworks-210x210.png differ diff --git a/assets/images/sponsors/cloudcontrol-100x60.png b/assets/images/sponsors/cloudcontrol-100x60.png new file mode 100644 index 00000000..ffb2e163 Binary files /dev/null and b/assets/images/sponsors/cloudcontrol-100x60.png differ diff --git a/assets/images/sponsors/cloudcontrol-205x130.png b/assets/images/sponsors/cloudcontrol-205x130.png new file mode 100644 index 00000000..9f790453 Binary files /dev/null and b/assets/images/sponsors/cloudcontrol-205x130.png differ diff --git a/assets/images/sponsors/cloudcontrol-210x210.png b/assets/images/sponsors/cloudcontrol-210x210.png new file mode 100644 index 00000000..11748a85 Binary files /dev/null and b/assets/images/sponsors/cloudcontrol-210x210.png differ diff --git a/assets/images/sponsors/cobotme-205x60.png b/assets/images/sponsors/cobotme-205x60.png new file mode 100644 index 00000000..775485cd Binary files /dev/null and b/assets/images/sponsors/cobotme-205x60.png differ diff --git a/assets/images/sponsors/codeminer-205x60.png b/assets/images/sponsors/codeminer-205x60.png new file mode 100644 index 00000000..f4b2caec Binary files /dev/null and b/assets/images/sponsors/codeminer-205x60.png differ diff --git a/assets/images/sponsors/crowdinteractive-205x60.png b/assets/images/sponsors/crowdinteractive-205x60.png new file mode 100644 index 00000000..d4399390 Binary files /dev/null and b/assets/images/sponsors/crowdinteractive-205x60.png differ diff --git a/assets/images/sponsors/engineyard-140x40.png b/assets/images/sponsors/engineyard-140x40.png new file mode 100644 index 00000000..46fec6bb Binary files /dev/null and b/assets/images/sponsors/engineyard-140x40.png differ diff --git a/assets/images/sponsors/enterprise-rails-140x40.png b/assets/images/sponsors/enterprise-rails-140x40.png new file mode 100644 index 00000000..3f992209 Binary files /dev/null and b/assets/images/sponsors/enterprise-rails-140x40.png differ diff --git a/assets/images/sponsors/esm-205x60.png b/assets/images/sponsors/esm-205x60.png new file mode 100644 index 00000000..d6c93c94 Binary files /dev/null and b/assets/images/sponsors/esm-205x60.png differ diff --git a/assets/images/sponsors/evilmartians-205x60.png b/assets/images/sponsors/evilmartians-205x60.png new file mode 100644 index 00000000..0322fa27 Binary files /dev/null and b/assets/images/sponsors/evilmartians-205x60.png differ diff --git a/assets/images/sponsors/fingertips-205x60.png b/assets/images/sponsors/fingertips-205x60.png new file mode 100644 index 00000000..f30e8164 Binary files /dev/null and b/assets/images/sponsors/fingertips-205x60.png differ diff --git a/assets/images/sponsors/gidsy.png b/assets/images/sponsors/gidsy.png new file mode 100644 index 00000000..a1f7ca1b Binary files /dev/null and b/assets/images/sponsors/gidsy.png differ diff --git a/assets/images/sponsors/github.png b/assets/images/sponsors/github.png new file mode 100644 index 00000000..224c946f Binary files /dev/null and b/assets/images/sponsors/github.png differ diff --git a/assets/images/sponsors/heroku-100x60.png b/assets/images/sponsors/heroku-100x60.png new file mode 100644 index 00000000..a79e3a8d Binary files /dev/null and b/assets/images/sponsors/heroku-100x60.png differ diff --git a/assets/images/sponsors/heroku-140x40.png b/assets/images/sponsors/heroku-140x40.png new file mode 100644 index 00000000..e104cd98 Binary files /dev/null and b/assets/images/sponsors/heroku-140x40.png differ diff --git a/assets/images/sponsors/heroku-205x130.png b/assets/images/sponsors/heroku-205x130.png new file mode 100644 index 00000000..f540df48 Binary files /dev/null and b/assets/images/sponsors/heroku-205x130.png differ diff --git a/assets/images/sponsors/heroku-205x60.png b/assets/images/sponsors/heroku-205x60.png new file mode 100644 index 00000000..b3e08851 Binary files /dev/null and b/assets/images/sponsors/heroku-205x60.png differ diff --git a/assets/images/sponsors/iriscouch-140x40.png b/assets/images/sponsors/iriscouch-140x40.png new file mode 100644 index 00000000..345807ce Binary files /dev/null and b/assets/images/sponsors/iriscouch-140x40.png differ diff --git a/assets/images/sponsors/jumpstartlab-140x40.png b/assets/images/sponsors/jumpstartlab-140x40.png new file mode 100644 index 00000000..cc097f2b Binary files /dev/null and b/assets/images/sponsors/jumpstartlab-140x40.png differ diff --git a/assets/images/sponsors/jumpstartlab-205x60.png b/assets/images/sponsors/jumpstartlab-205x60.png new file mode 100644 index 00000000..463887ec Binary files /dev/null and b/assets/images/sponsors/jumpstartlab-205x60.png differ diff --git a/assets/images/sponsors/kanbanery-100x60.png b/assets/images/sponsors/kanbanery-100x60.png new file mode 100644 index 00000000..8e986406 Binary files /dev/null and b/assets/images/sponsors/kanbanery-100x60.png differ diff --git a/assets/images/sponsors/kanbanery-205x130.png b/assets/images/sponsors/kanbanery-205x130.png new file mode 100644 index 00000000..186d11d0 Binary files /dev/null and b/assets/images/sponsors/kanbanery-205x130.png differ diff --git a/assets/images/sponsors/kanbanery-205x60.png b/assets/images/sponsors/kanbanery-205x60.png new file mode 100644 index 00000000..5a402e39 Binary files /dev/null and b/assets/images/sponsors/kanbanery-205x60.png differ diff --git a/assets/images/sponsors/librato-metrics-140x40.png b/assets/images/sponsors/librato-metrics-140x40.png new file mode 100644 index 00000000..19be7adb Binary files /dev/null and b/assets/images/sponsors/librato-metrics-140x40.png differ diff --git a/assets/images/sponsors/medidata-205x60.png b/assets/images/sponsors/medidata-205x60.png new file mode 100644 index 00000000..19e0db9f Binary files /dev/null and b/assets/images/sponsors/medidata-205x60.png differ diff --git a/assets/images/sponsors/meltmedia-205x60.png b/assets/images/sponsors/meltmedia-205x60.png new file mode 100644 index 00000000..c7d65875 Binary files /dev/null and b/assets/images/sponsors/meltmedia-205x60.png differ diff --git a/assets/images/sponsors/mindmatters-205x60.png b/assets/images/sponsors/mindmatters-205x60.png new file mode 100644 index 00000000..9edd7b9e Binary files /dev/null and b/assets/images/sponsors/mindmatters-205x60.png differ diff --git a/assets/images/sponsors/mongohq-100x60.png b/assets/images/sponsors/mongohq-100x60.png new file mode 100644 index 00000000..1f50505d Binary files /dev/null and b/assets/images/sponsors/mongohq-100x60.png differ diff --git a/assets/images/sponsors/mongohq-205x130.png b/assets/images/sponsors/mongohq-205x130.png new file mode 100644 index 00000000..6b431f17 Binary files /dev/null and b/assets/images/sponsors/mongohq-205x130.png differ diff --git a/assets/images/sponsors/mongohq-205x60.png b/assets/images/sponsors/mongohq-205x60.png new file mode 100644 index 00000000..dfe04e5c Binary files /dev/null and b/assets/images/sponsors/mongohq-205x60.png differ diff --git a/assets/images/sponsors/nedap-100x60.png b/assets/images/sponsors/nedap-100x60.png new file mode 100644 index 00000000..6aa9a9ee Binary files /dev/null and b/assets/images/sponsors/nedap-100x60.png differ diff --git a/assets/images/sponsors/nedap-205x130.png b/assets/images/sponsors/nedap-205x130.png new file mode 100644 index 00000000..69294bf4 Binary files /dev/null and b/assets/images/sponsors/nedap-205x130.png differ diff --git a/assets/images/sponsors/nedap-205x60.png b/assets/images/sponsors/nedap-205x60.png new file mode 100644 index 00000000..a9e2895c Binary files /dev/null and b/assets/images/sponsors/nedap-205x60.png differ diff --git a/assets/images/sponsors/nedap-430x130.png b/assets/images/sponsors/nedap-430x130.png new file mode 100644 index 00000000..4423d1b3 Binary files /dev/null and b/assets/images/sponsors/nedap-430x130.png differ diff --git a/assets/images/sponsors/papertrail-140x40.png b/assets/images/sponsors/papertrail-140x40.png new file mode 100644 index 00000000..4a55288c Binary files /dev/null and b/assets/images/sponsors/papertrail-140x40.png differ diff --git a/assets/images/sponsors/planio-100x60.png b/assets/images/sponsors/planio-100x60.png new file mode 100644 index 00000000..8438d775 Binary files /dev/null and b/assets/images/sponsors/planio-100x60.png differ diff --git a/assets/images/sponsors/planio-205x130.png b/assets/images/sponsors/planio-205x130.png new file mode 100644 index 00000000..d858e26f Binary files /dev/null and b/assets/images/sponsors/planio-205x130.png differ diff --git a/assets/images/sponsors/planio-205x60.png b/assets/images/sponsors/planio-205x60.png new file mode 100644 index 00000000..c70b7faf Binary files /dev/null and b/assets/images/sponsors/planio-205x60.png differ diff --git a/assets/images/sponsors/postmark-140x40.png b/assets/images/sponsors/postmark-140x40.png new file mode 100644 index 00000000..cbfd4acf Binary files /dev/null and b/assets/images/sponsors/postmark-140x40.png differ diff --git a/assets/images/sponsors/pusher-140x40.png b/assets/images/sponsors/pusher-140x40.png new file mode 100644 index 00000000..a3869727 Binary files /dev/null and b/assets/images/sponsors/pusher-140x40.png differ diff --git a/assets/images/sponsors/railslove-140x40.png b/assets/images/sponsors/railslove-140x40.png new file mode 100644 index 00000000..dc6bd9dc Binary files /dev/null and b/assets/images/sponsors/railslove-140x40.png differ diff --git a/assets/images/sponsors/railslove.png b/assets/images/sponsors/railslove.png new file mode 100644 index 00000000..4c3da1ac Binary files /dev/null and b/assets/images/sponsors/railslove.png differ diff --git a/assets/images/sponsors/servergrove-140x40.png b/assets/images/sponsors/servergrove-140x40.png new file mode 100644 index 00000000..05360ea4 Binary files /dev/null and b/assets/images/sponsors/servergrove-140x40.png differ diff --git a/assets/images/sponsors/shopify-140x40.png b/assets/images/sponsors/shopify-140x40.png new file mode 100644 index 00000000..70d37581 Binary files /dev/null and b/assets/images/sponsors/shopify-140x40.png differ diff --git a/assets/images/sponsors/shopify.png b/assets/images/sponsors/shopify.png new file mode 100644 index 00000000..e513522e Binary files /dev/null and b/assets/images/sponsors/shopify.png differ diff --git a/assets/images/sponsors/site5-205x60.png b/assets/images/sponsors/site5-205x60.png new file mode 100644 index 00000000..1e03b3b0 Binary files /dev/null and b/assets/images/sponsors/site5-205x60.png differ diff --git a/assets/images/sponsors/soundcloud-100x60.png b/assets/images/sponsors/soundcloud-100x60.png new file mode 100644 index 00000000..7bce4957 Binary files /dev/null and b/assets/images/sponsors/soundcloud-100x60.png differ diff --git a/assets/images/sponsors/soundcloud-205x130.png b/assets/images/sponsors/soundcloud-205x130.png new file mode 100644 index 00000000..eda0ebee Binary files /dev/null and b/assets/images/sponsors/soundcloud-205x130.png differ diff --git a/assets/images/sponsors/soundcloud-205x60.png b/assets/images/sponsors/soundcloud-205x60.png new file mode 100644 index 00000000..5aa886ad Binary files /dev/null and b/assets/images/sponsors/soundcloud-205x60.png differ diff --git a/assets/images/sponsors/soundcloud.png b/assets/images/sponsors/soundcloud.png new file mode 100644 index 00000000..c00faba7 Binary files /dev/null and b/assets/images/sponsors/soundcloud.png differ diff --git a/assets/images/sponsors/stickermule-140x40.png b/assets/images/sponsors/stickermule-140x40.png new file mode 100644 index 00000000..5fb9498c Binary files /dev/null and b/assets/images/sponsors/stickermule-140x40.png differ diff --git a/assets/images/sponsors/stripe-140x40.png b/assets/images/sponsors/stripe-140x40.png new file mode 100644 index 00000000..d440f9ce Binary files /dev/null and b/assets/images/sponsors/stripe-140x40.png differ diff --git a/assets/images/sponsors/stripe-205x60.png b/assets/images/sponsors/stripe-205x60.png new file mode 100644 index 00000000..f284cb94 Binary files /dev/null and b/assets/images/sponsors/stripe-205x60.png differ diff --git a/assets/images/sponsors/stripe-stamp-111x103.png b/assets/images/sponsors/stripe-stamp-111x103.png new file mode 100644 index 00000000..ce37710e Binary files /dev/null and b/assets/images/sponsors/stripe-stamp-111x103.png differ diff --git a/assets/images/sponsors/thinkrelevance-205x60.png b/assets/images/sponsors/thinkrelevance-205x60.png new file mode 100644 index 00000000..45b3f912 Binary files /dev/null and b/assets/images/sponsors/thinkrelevance-205x60.png differ diff --git a/assets/images/sponsors/thoughtbot-140x40.png b/assets/images/sponsors/thoughtbot-140x40.png new file mode 100644 index 00000000..b12cd310 Binary files /dev/null and b/assets/images/sponsors/thoughtbot-140x40.png differ diff --git a/assets/images/sponsors/ticketevolution-100x60.png b/assets/images/sponsors/ticketevolution-100x60.png new file mode 100644 index 00000000..f0b4bfbf Binary files /dev/null and b/assets/images/sponsors/ticketevolution-100x60.png differ diff --git a/assets/images/sponsors/ticketevolution-205x130.jpg b/assets/images/sponsors/ticketevolution-205x130.jpg new file mode 100644 index 00000000..c1f233a0 Binary files /dev/null and b/assets/images/sponsors/ticketevolution-205x130.jpg differ diff --git a/assets/images/sponsors/ticketevolution-205x60.jpg b/assets/images/sponsors/ticketevolution-205x60.jpg new file mode 100644 index 00000000..058d45f4 Binary files /dev/null and b/assets/images/sponsors/ticketevolution-205x60.jpg differ diff --git a/assets/images/sponsors/tupalo-205x60.png b/assets/images/sponsors/tupalo-205x60.png new file mode 100644 index 00000000..2bbb0c4d Binary files /dev/null and b/assets/images/sponsors/tupalo-205x60.png differ diff --git a/assets/images/sponsors/twitter-205x60.png b/assets/images/sponsors/twitter-205x60.png new file mode 100644 index 00000000..1b886678 Binary files /dev/null and b/assets/images/sponsors/twitter-205x60.png differ diff --git a/assets/images/sponsors/wooga-100x60.png b/assets/images/sponsors/wooga-100x60.png new file mode 100644 index 00000000..e511d203 Binary files /dev/null and b/assets/images/sponsors/wooga-100x60.png differ diff --git a/assets/images/sponsors/wooga-205x130.png b/assets/images/sponsors/wooga-205x130.png new file mode 100644 index 00000000..3c0f9138 Binary files /dev/null and b/assets/images/sponsors/wooga-205x130.png differ diff --git a/assets/images/sponsors/wooga-210x210.png b/assets/images/sponsors/wooga-210x210.png new file mode 100644 index 00000000..ccf039f1 Binary files /dev/null and b/assets/images/sponsors/wooga-210x210.png differ diff --git a/assets/images/sponsors/xing-100x60.png b/assets/images/sponsors/xing-100x60.png new file mode 100644 index 00000000..d85ee60f Binary files /dev/null and b/assets/images/sponsors/xing-100x60.png differ diff --git a/assets/images/sponsors/xing-205x130.png b/assets/images/sponsors/xing-205x130.png new file mode 100644 index 00000000..605aa9d8 Binary files /dev/null and b/assets/images/sponsors/xing-205x130.png differ diff --git a/assets/images/sponsors/xing-210x210.png b/assets/images/sponsors/xing-210x210.png new file mode 100644 index 00000000..edde528c Binary files /dev/null and b/assets/images/sponsors/xing-210x210.png differ diff --git a/assets/images/sponsors/zendesk-205x60.png b/assets/images/sponsors/zendesk-205x60.png new file mode 100644 index 00000000..f08c70bd Binary files /dev/null and b/assets/images/sponsors/zendesk-205x60.png differ diff --git a/assets/images/sponsors/zweitag-100x60.png b/assets/images/sponsors/zweitag-100x60.png new file mode 100644 index 00000000..1a5a9e92 Binary files /dev/null and b/assets/images/sponsors/zweitag-100x60.png differ diff --git a/assets/images/sponsors/zweitag-205x130.png b/assets/images/sponsors/zweitag-205x130.png new file mode 100644 index 00000000..efcb3f47 Binary files /dev/null and b/assets/images/sponsors/zweitag-205x130.png differ diff --git a/assets/images/sponsors/zweitag-205x60.png b/assets/images/sponsors/zweitag-205x60.png new file mode 100644 index 00000000..c2a01f20 Binary files /dev/null and b/assets/images/sponsors/zweitag-205x60.png differ diff --git a/assets/images/ui/background-left.png b/assets/images/ui/background-left.png new file mode 100644 index 00000000..2736ceb0 Binary files /dev/null and b/assets/images/ui/background-left.png differ diff --git a/assets/images/ui/current-repository-indicator-even.png b/assets/images/ui/current-repository-indicator-even.png new file mode 100644 index 00000000..3f239692 Binary files /dev/null and b/assets/images/ui/current-repository-indicator-even.png differ diff --git a/assets/images/ui/current-repository-indicator-odd.png b/assets/images/ui/current-repository-indicator-odd.png new file mode 100644 index 00000000..3d45ecda Binary files /dev/null and b/assets/images/ui/current-repository-indicator-odd.png differ diff --git a/assets/images/ui/logo.png b/assets/images/ui/logo.png new file mode 100644 index 00000000..4edc8501 Binary files /dev/null and b/assets/images/ui/logo.png differ diff --git a/assets/images/ui/off.png b/assets/images/ui/off.png new file mode 100644 index 00000000..bee0a650 Binary files /dev/null and b/assets/images/ui/off.png differ diff --git a/assets/images/ui/on.png b/assets/images/ui/on.png new file mode 100644 index 00000000..f0626a6f Binary files /dev/null and b/assets/images/ui/on.png differ diff --git a/assets/images/ui/onoff.png b/assets/images/ui/onoff.png new file mode 100644 index 00000000..36c88865 Binary files /dev/null and b/assets/images/ui/onoff.png differ diff --git a/assets/images/ui/spinner.backup.gif b/assets/images/ui/spinner.backup.gif new file mode 100644 index 00000000..5b33f7e5 Binary files /dev/null and b/assets/images/ui/spinner.backup.gif differ diff --git a/assets/images/ui/spinner.gif b/assets/images/ui/spinner.gif new file mode 100644 index 00000000..e7eb4cb1 Binary files /dev/null and b/assets/images/ui/spinner.gif differ diff --git a/assets/images/ui/spinner_long.gif b/assets/images/ui/spinner_long.gif new file mode 100644 index 00000000..a69ef3ef Binary files /dev/null and b/assets/images/ui/spinner_long.gif differ diff --git a/assets/images/ui/tipsy.gif b/assets/images/ui/tipsy.gif new file mode 100644 index 00000000..74eebae2 Binary files /dev/null and b/assets/images/ui/tipsy.gif differ diff --git a/assets/images/ui/tools-button.png b/assets/images/ui/tools-button.png new file mode 100644 index 00000000..75f0c900 Binary files /dev/null and b/assets/images/ui/tools-button.png differ diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 33befe2c..47658c33 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -1,24 +1,65 @@ -$.mockjaxSettings.log = false - -@Travis = Em.Namespace.create - App: Em.Application.extend - initialize: (router) -> - $.extend(this, Travis.Controllers) - $.extend(this, Travis.Views) - @store = Travis.Store.create() - @_super(router || Travis.Router.create()) - - run: -> - @app = Travis.App.create() - @app.initialize() - - +require 'hax0rs' require 'ext/jquery' + +# $.mockjaxSettings.log = false +# Ember.LOG_BINDINGS = true +@Travis = Em.Namespace.create + CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'] + + INTERVALS: { sponsors: -1, times: -1 } + + # QUEUES: [ + # { name: 'common', display: 'Common' }, + # { name: 'php', display: 'PHP, Perl and Python' }, + # { name: 'node_js', display: 'Node.js' }, + # { name: 'jvmotp', display: 'JVM and Erlang' }, + # { name: 'rails', display: 'Rails' }, + # { name: 'spree', display: 'Spree' }, + # ], + + QUEUES: [ + { name: 'common', display: 'Common' }, + { name: 'jvmotp', display: 'JVM and Erlang' }, + ], + + run: (attrs) -> + @app = Travis.App.create(attrs || {}) + + App: Em.Application.extend + init: () -> + @_super() + @connect() + + @store = Travis.Store.create() + @store.loadMany(Travis.Sponsor, Travis.SPONSORS) + + @routes = Travis.Router.create() + @routes.start() + + @initialize(Em.Object.create()) # TODO sheesh. + + connect: -> + @controller = Em.Controller.create() + view = Em.View.create + template: Em.Handlebars.compile('{{outlet layout}}') + controller: @controller + view.appendTo(@get('rootElement') || 'body') + + layout: (name) -> + if @_layout && @_layout.name == name + @_layout + else + @_layout = Travis.Layout[$.camelize(name)].create(parent: @controller) + require 'controllers' require 'helpers' +require 'layout' require 'models' require 'router' require 'store' require 'templates' require 'views' -require 'locales' + +require 'config/locales' +require 'data/sponsors' + diff --git a/assets/javascripts/app/controllers.coffee b/assets/javascripts/app/controllers.coffee index 3950ab54..9443744a 100644 --- a/assets/javascripts/app/controllers.coffee +++ b/assets/javascripts/app/controllers.coffee @@ -1,12 +1,18 @@ require 'helpers' +require 'travis/ticker' -Travis.Controllers = - ApplicationController: Em.Controller.extend() +Travis.Controllers = Em.Namespace.create RepositoriesController: Em.ArrayController.extend() RepositoryController: Em.ObjectController.extend(Travis.Urls.Repository) - TabsController: Em.Controller.extend() - HistoryController: Em.ArrayController.extend() + BuildsController: Em.ArrayController.extend() BuildController: Em.ObjectController.extend(Travis.Urls.Commit) JobController: Em.ObjectController.extend(Travis.Urls.Commit) + QueuesController: Em.ArrayController.extend() + UserController: Em.ObjectController.extend() + HooksController: Em.ArrayController.extend() + # TopController: Em.Controller.extend + # userBinding: 'Travis.app.currentUser' +require 'controllers/sponsors' +require 'controllers/workers' diff --git a/assets/javascripts/app/controllers/sponsors.coffee b/assets/javascripts/app/controllers/sponsors.coffee new file mode 100644 index 00000000..72c7bd2d --- /dev/null +++ b/assets/javascripts/app/controllers/sponsors.coffee @@ -0,0 +1,27 @@ +Travis.Controllers.SponsorsController = Em.ArrayController.extend + page: 0 + + arrangedContent: (-> + @get('shuffled').slice(@start(), @end()) + ).property('shuffled.length', 'page') + + shuffled: (-> + if content = @get('content') then $.shuffle(content) else [] + ).property('content.length') + + next: -> + @set('page', if @isLast() then 0 else @get('page') + 1) + + pages: (-> + length = @getPath('content.length') + if length then parseInt(length / @get('perPage') + 1) else 1 + ).property('length') + + isLast: -> + @get('page') == @get('pages') - 1 + + start: -> + @get('page') * @get('perPage') + + end: -> + @start() + @get('perPage') diff --git a/assets/javascripts/app/controllers/workers.coffee b/assets/javascripts/app/controllers/workers.coffee new file mode 100644 index 00000000..5c6dc616 --- /dev/null +++ b/assets/javascripts/app/controllers/workers.coffee @@ -0,0 +1,10 @@ +Travis.Controllers.WorkersController = Em.ArrayController.extend + groups: (-> + groups = {} + for worker in @get('content').toArray() + host = worker.get('host') + groups[host] = Em.ArrayProxy.create(content: []) if !(host in groups) + groups[host].pushObject(worker) + $.values(groups) + ).property('content.length') + diff --git a/assets/javascripts/app/helpers/handlebars.coffee b/assets/javascripts/app/helpers/handlebars.coffee index d5d2753c..63471d9d 100644 --- a/assets/javascripts/app/helpers/handlebars.coffee +++ b/assets/javascripts/app/helpers/handlebars.coffee @@ -3,9 +3,6 @@ require 'ext/ember/bound_helper' safe = (string) -> new Handlebars.SafeString(string) -Handlebars.registerHelper 'whats_this', (id) -> - safe ' ' - Handlebars.registerHelper 'tipsy', (text, tip) -> safe '' + text + '' diff --git a/assets/javascripts/app/helpers/urls.coffee b/assets/javascripts/app/helpers/urls.coffee index 45d74704..1540a6ca 100644 --- a/assets/javascripts/app/helpers/urls.coffee +++ b/assets/javascripts/app/helpers/urls.coffee @@ -1,35 +1,50 @@ @Travis.Urls = + repository: (repository) -> + "#!/#{repository.get('slug')}" if repository + + lastBuild: (repository) -> + "#!/#{repository.get('slug')}/builds/#{repository.get('lastBuildId')}" if repository + + builds: (repository) -> + "#!/#{repository.get('slug')}/builds" if repository + + build: (repository, build) -> + "#!/#{repository.get('slug')}/builds/#{build.get('id')}" if repository && build + + job: (repository, job) -> + "#!/#{repository.get('slug')}/jobs/#{job.get('id')}" if repository && job + Repository: urlGithub: (-> - 'http://github.com/%@'.fmt @get('slug') + "http://github.com/#{@get('slug')}" ).property('slug'), urlGithubWatchers: (-> - 'http://github.com/%@/watchers'.fmt @get('slug') + "http://github.com/#{@get('slug')}/watchers" ).property('slug'), urlGithubNetwork: (-> - 'http://github.com/%@/network'.fmt @get('slug') + "http://github.com/#{@get('slug')}/network" ).property('slug'), urlGithubAdmin: (-> - 'http://github.com/%@/admin/hooks#travis_minibucket'.fmt @get('slug') + "http://github.com/#{@get('slug')}/admin/hooks#travis_minibucket" ).property('slug') statusImage: (-> - '%@.png'.fmt @get('slug') + "#{@get('slug')}.png" ).property('slug') Commit: urlGithubCommit: (-> - 'http://github.com/%@/commit/%@'.fmt @getPath('repository.slug'), @getPath('commit.sha') + "http://github.com/#{@getPath('repository.slug')}/commit/#{@getPath('commit.sha')}" ).property('repository.slug', 'commit.sha') urlAuthor: (-> - 'mailto:%@'.fmt @getPath('commit.authorEmail') - ).property() + "mailto:#{@getPath('commit.authorEmail')}" + ).property('commit.authorEmail') urlCommitter: (-> - 'mailto:%@'.fmt @getPath('commit.committerEmail') - ).property() + "mailto:#{@getPath('commit.committerEmail')}" + ).property('commit.committerEmail') diff --git a/assets/javascripts/app/layout.coffee b/assets/javascripts/app/layout.coffee new file mode 100644 index 00000000..3370d703 --- /dev/null +++ b/assets/javascripts/app/layout.coffee @@ -0,0 +1,7 @@ +Travis.Layout = Em.Namespace.create() + +require 'layout/home' +require 'layout/sidebar' +require 'layout/profile' +require 'layout/stats' + diff --git a/assets/javascripts/app/layout/base.coffee b/assets/javascripts/app/layout/base.coffee new file mode 100644 index 00000000..483012d0 --- /dev/null +++ b/assets/javascripts/app/layout/base.coffee @@ -0,0 +1,35 @@ +Travis.Layout.Base = Em.Object.extend + init: -> + @parent = @get('parent') + + @setup(Array.prototype.slice.apply(arguments).concat(@get('name'))) + @connect() + + setup: (controllers) -> + $.extend this, Travis.Controllers + $.extend this, Travis.Views + + # ember wants this kind of setup for its connectOutlets magic + for name in controllers + key = "#{$.camelize(name, false)}Controller" + name = $.camelize(key) + klass = Travis.Controllers[name] || Em.Controller + this[key] = klass.create(namespace: this, controllers: this) + + @controller = this["#{$.camelize(@get('name'), false)}Controller"] + @viewClass = Travis.Views["#{$.camelize(@get('name'))}Layout"] + + connect: -> + @parent.connectOutlet + outletName: 'layout' + controller: @controller + viewClass: @viewClass + @connectTop() + + connectTop: -> + @controller.connectOutlet(outletName: 'top', name: 'top') + @topController.set('tab', @get('name')) + + activate: (action, params) -> + this["view#{$.camelize(action)}"](params) + diff --git a/assets/javascripts/app/layout/home.coffee b/assets/javascripts/app/layout/home.coffee new file mode 100644 index 00000000..97de4ec1 --- /dev/null +++ b/assets/javascripts/app/layout/home.coffee @@ -0,0 +1,86 @@ +require 'layout/base' + +Travis.Layout.Home = Travis.Layout.Base.extend + name: 'home' + + init: -> + @_super('top', 'repositories', 'repository', 'tabs', 'builds', 'build', 'job') + @connectLeft(Travis.Repository.find()) + Travis.Layout.Sidebar.create(homeController: @get('homeController')) + + viewIndex: (params) -> + onceLoaded @repositories, => + repository = @repositories.get('firstObject') + @connectRepository(repository) + @connectTabs('current') + @connectBuild(repository.get('lastBuild')) + + viewCurrent: (params) -> + @viewRepository params, (repository) => + @connectTabs('current') + @connectBuild(repository.get('lastBuild')) + + viewBuilds: (params) -> + @viewRepository params, (repository) => + @connectTabs('builds') + @connectBuilds(repository.get('builds')) + + viewBuild: (params) -> + @viewRepository params + @buildBy params.id, (build) => + @connectTabs('build', build) + @connectBuild(build) + + viewJob: (params) -> + @viewRepository params + @jobBy params.id, (job) => + @connectTabs('job', job.get('build'), job) + @connectJob(job) + + + viewRepository: (params, callback) -> + @repositoryBy params, (repository) => + @connectRepository(repository) + callback(repository) if callback + + repositoryBy: (params, callback) -> + repositories = Travis.Repository.bySlug("#{params.owner}/#{params.name}") + onceLoaded repositories, => + callback(repositories.get('firstObject')) + + buildBy: (id, callback) => + build = Travis.Build.find(id) + onceLoaded build, => + callback(build) + + jobBy: (id, callback) -> + job = Travis.Job.find(id) + onceLoaded job, => + callback(job) + + + connectLeft: (repositories) -> + @repositories = repositories + @homeController.connectOutlet(outletName: 'left', name: 'repositories', context: repositories) + + connectRepository: (repository) -> + @repository = repository + @homeController.connectOutlet(outletName: 'main', name: 'repository', context: repository) + + connectTabs: (tab, build, job) -> + @tabsController.set('tab', tab) + @tabsController.set('repository', @repository) + @tabsController.set('build', build) + @tabsController.set('job', job) + @homeController.connectOutlet(outletName: 'tabs', name: 'tabs') + + connectBuilds: (builds) -> + @homeController.connectOutlet(outletName: 'tab', name: 'builds', context: builds) + + connectBuild: (build) -> + @homeController.connectOutlet(outletName: 'tab', name: 'build', context: build) + + connectJob: (job) -> + @homeController.connectOutlet(outletName: 'tab', name: 'job', context: job) + + diff --git a/assets/javascripts/app/layout/profile.coffee b/assets/javascripts/app/layout/profile.coffee new file mode 100644 index 00000000..d5261789 --- /dev/null +++ b/assets/javascripts/app/layout/profile.coffee @@ -0,0 +1,18 @@ +require 'layout/base' + +Travis.Layout.Profile = Travis.Layout.Base.extend + name: 'profile' + + init: -> + @_super('top', 'user', 'hooks') + + viewShow: (params) -> + @connectUser(@currentUser) + @connectHooks(Travis.Hook.find()) + + connectUser: (user) -> + @profileController.connectOutlet(outletName: 'main', name: 'user', context: user) + + connectHooks: (hooks) -> + @userController.connectOutlet(outletName: 'hooks', name: 'hooks', context: hooks) if hooks + diff --git a/assets/javascripts/app/layout/sidebar.coffee b/assets/javascripts/app/layout/sidebar.coffee new file mode 100644 index 00000000..dc3b60e6 --- /dev/null +++ b/assets/javascripts/app/layout/sidebar.coffee @@ -0,0 +1,40 @@ +require 'layout/base' + +Travis.Layout.Sidebar = Travis.Layout.Base.extend + name: 'sidebar' + + init: -> + @_super('sponsors', 'workers', 'queues') + @homeController = @get('homeController') + + @connectSponsors(Travis.Sponsor.decks(), Travis.Sponsor.links()) + @connectWorkers(Travis.Worker.find()) + @connectQueues(Travis.QUEUES) + + Travis.Ticker.create(target: this, interval: Travis.INTERVALS.sponsors) + + connect: -> + @homeController.connectOutlet(outletName: 'right', name: 'sidebar') + + connectSponsors: (decks, links) -> + @sponsorsController = Em.Controller.create + decks: Travis.Controllers.SponsorsController.create(perPage: 1, content: decks) + links: Travis.Controllers.SponsorsController.create(perPage: 6, content: links) + @homeController.set 'sponsors', @sponsorsController + + tick: -> + @sponsorsController.get('decks').next() + @sponsorsController.get('links').next() + + connectWorkers: (workers) -> + @workersController.set('content', workers) + @homeController.set('workers', @workersController) + + connectQueues: (queues) -> + queues = for queue in queues + Em.ArrayController.create + content: Travis.Job.queued(queue.name) + name: queue.display + @queuesController.set('content', queues) + @homeController.set('queues', @queuesController) + diff --git a/assets/javascripts/app/layout/stats.coffee b/assets/javascripts/app/layout/stats.coffee new file mode 100644 index 00000000..b36aa7c0 --- /dev/null +++ b/assets/javascripts/app/layout/stats.coffee @@ -0,0 +1,15 @@ +require 'layout/base' + +Travis.Layout.Stats = Travis.Layout.Base.extend + name: 'stats' + + init: -> + @_super('top', 'stats', 'hooks') + + viewShow: (params) -> + if @currentUser + @connectStats() + + connectStats: () -> + @statsController.connectOutlet(outletName: 'main', name: 'stats') + diff --git a/assets/javascripts/app/models.coffee b/assets/javascripts/app/models.coffee index fe337cd7..171b195c 100644 --- a/assets/javascripts/app/models.coffee +++ b/assets/javascripts/app/models.coffee @@ -1,6 +1,10 @@ -require 'models/build' -require 'models/repository' -require 'models/commit' -require 'models/job' require 'models/artifact' +require 'models/build' +require 'models/commit' +require 'models/hook' +require 'models/job' +require 'models/repository' +require 'models/sponsor' +require 'models/user' +require 'models/worker' diff --git a/assets/javascripts/app/models/build.coffee b/assets/javascripts/app/models/build.coffee index ce21ed95..26aaf8ad 100644 --- a/assets/javascripts/app/models/build.coffee +++ b/assets/javascripts/app/models/build.coffee @@ -34,10 +34,9 @@ require 'travis/model' ).property('data.job_ids.length') configKeys: (-> - config = @get('config') - return [] unless config - keys = $.keys($.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala')) - headers = [I18n.t('build.job'), I18n.t('build.duration'), I18n.t('build.finished_at')] + return [] unless config = @get('config') + keys = $.intersect($.keys(config), Travis.CONFIG_KEYS) + headers = (I18n.t(key) for key in ['build.job', 'build.duration', 'build.finished_at']) $.map(headers.concat(keys), (key) -> return $.camelize(key)) ).property('config') diff --git a/assets/javascripts/app/models/hook.coffee b/assets/javascripts/app/models/hook.coffee new file mode 100644 index 00000000..44f06323 --- /dev/null +++ b/assets/javascripts/app/models/hook.coffee @@ -0,0 +1,32 @@ +require 'travis/model' + +@Travis.Hook = Travis.Model.extend + primaryKey: 'slug' + slug: DS.attr('string') + description: DS.attr('string') + active: DS.attr('boolean') + + owner: (-> + @get('slug').split('/')[0] + ).property('slug') + + name: (-> + @get('slug').split('/')[1] + ).property('slug') + + urlGithub: (-> + "http://github.com/#{@get('slug')}" + ).property() + + urlGithubAdmin: (-> + "http://github.com/#{@get('slug')}/admin/hooks#travis_minibucket" + ).property() + + toggle: -> + @set 'active', !@get('active') + Travis.app.store.commit() + +@Travis.Hook.reopenClass + url: 'profile/hooks' + + diff --git a/assets/javascripts/app/models/job.coffee b/assets/javascripts/app/models/job.coffee index dc5fd3e5..5bfb8e55 100644 --- a/assets/javascripts/app/models/job.coffee +++ b/assets/javascripts/app/models/job.coffee @@ -48,8 +48,9 @@ require 'travis/model' @Travis.Job.reopenClass queued: (queue) -> - @all() + @find() Travis.app.store.filter this, (job) -> job.get('queue') == 'builds.' + queue + findMany: (ids) -> Travis.app.store.findMany this, ids diff --git a/assets/javascripts/app/models/repository.coffee b/assets/javascripts/app/models/repository.coffee index eca5e446..10391ba5 100644 --- a/assets/javascripts/app/models/repository.coffee +++ b/assets/javascripts/app/models/repository.coffee @@ -2,6 +2,8 @@ require 'travis/model' @Travis.Repository = Travis.Model.extend slug: DS.attr('string') + owner: DS.attr('string') + name: DS.attr('string') description: DS.attr('string') lastBuildId: DS.attr('number') lastBuildNumber: DS.attr('string') @@ -9,8 +11,6 @@ require 'travis/model' lastBuildStarted_at: DS.attr('string') lastBuildFinished_at: DS.attr('string') - primaryKey: 'slug' - lastBuild: DS.belongsTo('Travis.Build') builds: (-> @@ -21,14 +21,6 @@ require 'travis/model' Travis.Build.byRepositoryId @get('id'), event_type: 'pull_request' ).property() - owner: (-> - (@get('slug') || @_id).split('/')[0] - ).property('owner', 'name'), - - name: (-> - (@get('slug') || @_id).split('/')[1] - ).property('owner', 'name'), - lastBuildDuration: (-> duration = @getPath('data.lastBuildDuration') duration = Travis.Helpers.durationFrom(@get('lastBuildStarted_at'), @get('lastBuildFinished_at')) unless duration diff --git a/assets/javascripts/app/models/service_hook.coffee b/assets/javascripts/app/models/service_hook.coffee deleted file mode 100644 index 70e0a227..00000000 --- a/assets/javascripts/app/models/service_hook.coffee +++ /dev/null @@ -1,20 +0,0 @@ -require 'travis/model' - -@Travis.ServiceHook = Travis.Model.extend - primaryKey: 'slug' - name: DS.attr('string') - owner_name: DS.attr('string') - active: DS.attr('boolean') - - slug: (-> - [@get('owner_name'), @get('name')].join('/') - ).property() - - toggle: -> - @set 'active', !@get('active') - Travis.app.store.commit() - -@Travis.ServiceHook.reopenClass - url: 'profile/service_hooks' - - diff --git a/assets/javascripts/app/models/sponsor.coffee b/assets/javascripts/app/models/sponsor.coffee new file mode 100644 index 00000000..157edd36 --- /dev/null +++ b/assets/javascripts/app/models/sponsor.coffee @@ -0,0 +1,30 @@ +require 'travis/model' + +@Travis.Sponsor = Travis.Model.extend + type: DS.attr('string') + url: DS.attr('string') + link: DS.attr('string') + + image: (-> + "images/sponsors/#{@getPath('data.image')}" + ).property('data.image') + +Travis.Sponsor.reopenClass + decks: -> + @platinum().concat @gold() + + platinum: -> + platinum = @byType('platinum').toArray() + [sponsor] for sponsor in platinum + + gold: -> + gold = @byType('gold').toArray() + gold.splice(0, 2) while gold.length > 0 + + links: -> + @byType('silver') + + byType: -> + types = Array.prototype.slice.apply(arguments) + Travis.Sponsor.filter (sponsor) -> types.indexOf(sponsor.get('type')) != -1 + diff --git a/assets/javascripts/app/models/user.coffee b/assets/javascripts/app/models/user.coffee new file mode 100644 index 00000000..ebcd12af --- /dev/null +++ b/assets/javascripts/app/models/user.coffee @@ -0,0 +1,12 @@ +require 'travis/model' + +@Travis.User = Travis.Model.extend + name: DS.attr('string') + email: DS.attr('string') + login: DS.attr('string') + token: DS.attr('string') + gravatar: DS.attr('string') + + urlGithub: (-> + "http://github.com/#{@get('login')}" + ).property() diff --git a/assets/javascripts/app/models/worker.coffee b/assets/javascripts/app/models/worker.coffee index 20108136..703f86ad 100644 --- a/assets/javascripts/app/models/worker.coffee +++ b/assets/javascripts/app/models/worker.coffee @@ -1,13 +1,5 @@ require 'travis/model' -@Travis.WorkerGroup = Ember.ArrayProxy.extend - init: -> - @set('content', []) - - host: (-> - @getPath 'firstObject.host' - ).property() - @Travis.Worker = Travis.Model.extend state: DS.attr('string') name: DS.attr('string') @@ -34,5 +26,5 @@ require 'travis/model' ).property('state') urlJob: (-> - '#!/%@/jobs/%@'.fmt @getPath('payload.repository.slug'), @getPath('payload.build.id') - ).property('payload', 'state') + "#!/#{@getPath('payload.repository.slug')}/jobs/#{@getPath('payload.build.id')}" + ).property('payload') diff --git a/assets/javascripts/app/router.coffee b/assets/javascripts/app/router.coffee index 715e0bfb..1788e878 100644 --- a/assets/javascripts/app/router.coffee +++ b/assets/javascripts/app/router.coffee @@ -1,119 +1,27 @@ -require 'hax0rs' +Travis.Router = Em.Object.extend + ROUTES: + '!/profile': ['profile', 'show'] + '!/stats': ['stats', 'show'] + '!/:owner/:name/jobs/:id/:line': ['home', 'job'] + '!/:owner/:name/jobs/:id': ['home', 'job'] + '!/:owner/:name/builds/:id': ['home', 'build'] + '!/:owner/:name/builds': ['home', 'builds'] + '!/:owner/:name/pull_requests': ['home', 'pullRequests'] + '!/:owner/:name/branch_summary': ['home', 'branches'] + '!/:owner/:name': ['home', 'current'] + '': ['home', 'index'] -@Travis.Router = Em.Router.extend - # enableLogging: true - location: 'hash' + start: -> + unless @started + @started = true + @route(route, target[0], target[1]) for route, target of @ROUTES - root: Em.Route.extend - # common "layout" state for all states that show a repo list on the left. - # there also will be "profile" and "stats" states next to "default" that do - # not have a 3-column layout - default: Em.Route.extend - route: '/' - - viewCurrent: Ember.Route.transitionTo('repository.current') - viewBuilds: Ember.Route.transitionTo('repository.builds') - viewBuild: Ember.Route.transitionTo('repository.build') - viewJob: Ember.Route.transitionTo('repository.job') - - connectOutlets: (router) -> - repositories = Travis.Repository.find() - router.set('repositories', repositories) - router.set('job', undefined) - router.connectLeft(repositories) - - index: Em.Route.extend - route: '/' - - # on / we show the most recent repository from the repos list, so we - # have to wait until it's loaded - connectOutlets: (router) -> - repositories = router.get('repositories') - onceLoaded repositories, => - repository = repositories.get('firstObject') - build = Travis.Build.find(repository.get('lastBuildId')) - router.connectRepository(repository) - router.connectTabs() - router.connectBuild(build) - - repository: Em.Route.extend - route: '/:owner/:name' - - serialize: (router, repository) -> - router.serializeRepository(repository) - - deserialize: (router, params) -> - router.deserializeRepository(params) - - connectOutlets: (router, repository) -> - router.connectRepository(repository) - - current: Em.Route.extend - route: '/' - - connectOutlets: (router) -> - repository = router.get('repository') - onceLoaded repository, -> # TODO should not need to wait here, right? - build = repository.get('lastBuild') - router.connectTabs() - router.connectBuild(build) - - builds: Em.Route.extend - route: '/builds' - - connectOutlets: (router) -> - repository = router.get('repository') - onceLoaded repository, => # TODO hrm, otherwise it gets builds?repository_id=null - router.connectTabs() - router.connectBuilds(repository.get('builds')) - - build: Em.Route.extend - route: '/builds/:build_id' - - connectOutlets: (router, build) -> - build = Travis.Build.find(build.id) unless build instanceof Travis.Build # what? - router.connectTabs(build) - router.connectBuild(build) - - job: Em.Route.extend - route: '/jobs/:job_id' - - connectOutlets: (router, job) -> - job = Travis.Job.find(job.id) unless job instanceof Travis.Job # what? - router.connectTabs(job.get('build'), job) - router.connectJob(job) - - - connectLeft: (repositories) -> - @get('applicationController').connectOutlet(outletName: 'left', name: 'repositories', context: repositories) - - connectRepository: (repository) -> - @set('repository', repository) - @get('applicationController').connectOutlet(outletName: 'main', name: 'repository', context: repository) - - connectTabs: (build, job) -> - @setPath('tabsController.repository', @get('repository')) - @setPath('tabsController.build', build) - @setPath('tabsController.job', job) - @get('repositoryController').connectOutlet(outletName: 'tabs', name: 'tabs') - - connectBuilds: (builds) -> - @get('repositoryController').connectOutlet(outletName: 'tab', name: 'history', context: builds) - - connectBuild: (build) -> - @get('repositoryController').connectOutlet(outletName: 'tab', name: 'build', context: build) - - connectJob: (job) -> - @get('repositoryController').connectOutlet(outletName: 'tab', name: 'job', context: job) - - - serializeRepository: (object) -> - if object instanceof Travis.Repository - slug = object.get('slug') || object._id # wat. - { owner: slug.split('/')[0], name: slug.split('/')[1] } - else - object - - deserializeRepository: (params) -> - Travis.Repository.find("#{params.owner}/#{params.name}") + route: (route, layout, action) -> + Em.routes.add route, (params) => + @action(layout, action, params) + action: (name, action, params) -> + # this needs to be a global reference because Em.routes is global + layout = Travis.app.layout(name) + layout.activate(action, params) + $('body').attr('id', name) diff --git a/assets/javascripts/app/store/rest_adapter.coffee b/assets/javascripts/app/store/rest_adapter.coffee index 9b008b23..fe3cc1c0 100644 --- a/assets/javascripts/app/store/rest_adapter.coffee +++ b/assets/javascripts/app/store/rest_adapter.coffee @@ -8,7 +8,6 @@ require 'models' builds: Travis.Build, commits: Travis.Commit, jobs: Travis.Job - service_hooks: Travis.ServiceHook plurals: repository: 'repositories', diff --git a/assets/javascripts/app/templates/application.hbs b/assets/javascripts/app/templates/application.hbs deleted file mode 100644 index e2178f7f..00000000 --- a/assets/javascripts/app/templates/application.hbs +++ /dev/null @@ -1,12 +0,0 @@ - - -
- {{outlet left}} -
- -
- {{outlet main}} -
diff --git a/assets/javascripts/app/templates/builds/list.hbs b/assets/javascripts/app/templates/builds/list.hbs index 2869b9ff..987dd52d 100644 --- a/assets/javascripts/app/templates/builds/list.hbs +++ b/assets/javascripts/app/templates/builds/list.hbs @@ -1,4 +1,4 @@ - +
@@ -12,8 +12,8 @@ {{#each build in content}} {{#view Travis.Views.BuildsItemView contextBinding="build"}} - - + + diff --git a/assets/javascripts/app/templates/builds/show.hbs b/assets/javascripts/app/templates/builds/show.hbs index 51b5a0f7..a7298c61 100644 --- a/assets/javascripts/app/templates/builds/show.hbs +++ b/assets/javascripts/app/templates/builds/show.hbs @@ -1,46 +1,48 @@ -
-
-
-
{{t builds.name}}
-
{{number}}
-
{{t builds.finished_at}}
-
{{formatTime finished_at}}
-
{{t builds.duration}}
-
{{formatDuration duration}}
-
+{{#unless isLoaded}} + Loading ... +{{else}} +
+
+
+
{{t builds.name}}
+
{{number}}
+
{{t builds.finished_at}}
+
{{formatTime finished_at}}
+
{{t builds.duration}}
+
{{formatDuration duration}}
+
-
-
{{t builds.commit}}
-
{{formatCommit commit}}
- {{#if commit.compareUrl}} -
{{t builds.compare}}
-
{{pathFrom commit.compareUrl}}
- {{/if}} - {{#if commit.authorName}} -
{{t builds.author}}
-
{{commit.authorName}}
- {{/if}} - {{#if commit.committerName}} -
{{t builds.committer}}
-
{{commit.committerName}}
- {{/if}} -
+
+
{{t builds.commit}}
+
{{formatCommit commit}}
+ {{#if commit.compareUrl}} +
{{t builds.compare}}
+
{{pathFrom commit.compareUrl}}
+ {{/if}} + {{#if commit.authorName}} +
{{t builds.author}}
+
{{commit.authorName}}
+ {{/if}} + {{#if commit.committerName}} +
{{t builds.committer}}
+
{{commit.committerName}}
+ {{/if}} +
-
{{t builds.message}}
-
{{{formatMessage commit.message}}}
+
{{t builds.message}}
+
{{{formatMessage commit.message}}}
- {{#unless isMatrix}} -
{{t builds.config}}
-
{{formatConfig config}}
- {{/unless}} -
+ {{#unless isMatrix}} +
{{t builds.config}}
+
{{formatConfig config}}
+ {{/unless}} +
- {{#if isLoaded}} {{#if isMatrix}} {{view Travis.Views.JobsView jobsBinding="view.requiredJobs" required="true"}} {{view Travis.Views.JobsView jobsBinding="view.allowedFailureJobs"}} {{else}} {{view Travis.Views.LogView contextBinding="jobs.firstObject"}} {{/if}} - {{/if}} -
+ +{{/unless}} diff --git a/assets/javascripts/app/templates/jobs/list.hbs b/assets/javascripts/app/templates/jobs/list.hbs index 57399898..02d3e87d 100644 --- a/assets/javascripts/app/templates/jobs/list.hbs +++ b/assets/javascripts/app/templates/jobs/list.hbs @@ -1,12 +1,16 @@ {{#if view.jobs.length}} -
{{t builds.name}}
{{number}}
{{number}} {{formatCommit commit}} {{{formatMessage commit.message short="true"}}} {{formatDuration duration}}
- + {{#if view.required}} +
- {{#if view.required}} - {{t jobs.build_matrix}} - {{else}} - {{t jobs.allowed_failures}}{{whats_this allow_failure_help}} - {{/if}} -
+ + {{else}} +
+ {{t jobs.build_matrix}} +
+ + {{/if}} {{#each configKeys}} @@ -15,15 +19,17 @@ - {{#each view.jobs}} - - - - - {{#each configValues}} - - {{/each}} - + {{#each job in view.jobs}} + {{#view Travis.Views.JobsItemView contextBinding="job"}} + + + + + {{#each configValues}} + + {{/each}} + + {{/view}} {{/each}}
+ {{t jobs.allowed_failures}} + +
#{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
@@ -41,11 +47,9 @@

You can define allowed failures in the build matrix as follows:

-
-      matrix:
-        allow_failures:
-          - rvm: ruby-head
-        
+
 matrix:
+  allow_failures:
+    - rvm: ruby-head 
{{/unless}} diff --git a/assets/javascripts/app/templates/jobs/log.hbs b/assets/javascripts/app/templates/jobs/log.hbs index 60067481..1f9279e7 100644 --- a/assets/javascripts/app/templates/jobs/log.hbs +++ b/assets/javascripts/app/templates/jobs/log.hbs @@ -1,4 +1,4 @@ -
{{{formatLog log.body}}}
+
{{{formatLog log.body}}}
{{#if sponsor.name}}
-
+
+
Job
-
{{number}}
+
{{number}}
{{t jobs.finished_at}}
{{formatTime finished_at}}
{{t jobs.duration}}
diff --git a/assets/javascripts/app/templates/layouts/home.hbs b/assets/javascripts/app/templates/layouts/home.hbs new file mode 100644 index 00000000..3266072f --- /dev/null +++ b/assets/javascripts/app/templates/layouts/home.hbs @@ -0,0 +1,42 @@ +
+ {{outlet top}} +
+ +
+ + + + +
+ {{outlet left}} +
+
+ +
+ {{outlet main}} + + {{outlet tabs}} + +
+ {{outlet tab}} +
+ + +
+ diff --git a/assets/javascripts/app/templates/layouts/sidebar.hbs b/assets/javascripts/app/templates/layouts/sidebar.hbs new file mode 100644 index 00000000..f559d9e5 --- /dev/null +++ b/assets/javascripts/app/templates/layouts/sidebar.hbs @@ -0,0 +1,27 @@ + + {{t layouts.application.fork_me}} + + +
+
  +
+ +{{view templateName="sponsors/decks"}} +{{view templateName="workers/list" id="workers"}} +{{view templateName="queues/list" id="queues"}} +{{view templateName="sponsors/links"}} + +
+

{{t layouts.about.alpha}}

+

{{{t layouts.about.messages.alpha}}}

+
+ +
+

{{t layouts.about.join}}

+ +
diff --git a/assets/javascripts/app/templates/layouts/simple.hbs b/assets/javascripts/app/templates/layouts/simple.hbs new file mode 100644 index 00000000..6a68071b --- /dev/null +++ b/assets/javascripts/app/templates/layouts/simple.hbs @@ -0,0 +1,8 @@ +
+ {{outlet top}} +
+ +
+ {{outlet main}} +
+ diff --git a/assets/javascripts/app/templates/layouts/top.hbs b/assets/javascripts/app/templates/layouts/top.hbs new file mode 100644 index 00000000..c39e8eef --- /dev/null +++ b/assets/javascripts/app/templates/layouts/top.hbs @@ -0,0 +1,38 @@ + +

Travis

+
+ + diff --git a/assets/javascripts/app/templates/profile/hooks.hbs b/assets/javascripts/app/templates/profile/hooks.hbs new file mode 100644 index 00000000..4c565684 --- /dev/null +++ b/assets/javascripts/app/templates/profile/hooks.hbs @@ -0,0 +1,18 @@ +{{#if content.length}} + +{{else}} +

Please wait while we sync with GitHub

+{{/if}} + diff --git a/assets/javascripts/app/templates/profile/show.hbs b/assets/javascripts/app/templates/profile/show.hbs new file mode 100644 index 00000000..c998e29a --- /dev/null +++ b/assets/javascripts/app/templates/profile/show.hbs @@ -0,0 +1,46 @@ +

{{name}}

+ + +
+
+ {{t profiles.show.github}}: +
+
+ {{login}} +
+
+ {{t profiles.show.email}}: +
+
+ {{email}} +
+
+ {{t profiles.show.token}}: +
+
+ {{token}} +
+
+ +

+ {{{t profiles.show.messages.notice}}} +

+ +

{{t profiles.show.your_locale}}

+
+ + +
+ +

{{t profiles.show.your_repos}}

+

+ {{{t profiles.show.message.your_repos}}} + + {{{t profiles.show.message.config}}} + +

+ +{{outlet hooks}} diff --git a/assets/javascripts/app/templates/queues/list.hbs b/assets/javascripts/app/templates/queues/list.hbs new file mode 100644 index 00000000..1281c9ce --- /dev/null +++ b/assets/javascripts/app/templates/queues/list.hbs @@ -0,0 +1,15 @@ +{{#each queue in queues}} +

{{t queue}}: {{queue.name}}

+
    + {{#each queue}} +
  • + {{repository.slug}} + {{#if number}} + #{{number}} + {{/if}} +
  • + {{else}} + {{t no_job}} + {{/each}} +
+{{/each}} diff --git a/assets/javascripts/app/templates/repositories/list.hbs b/assets/javascripts/app/templates/repositories/list.hbs index cbc2520b..c6bc6526 100644 --- a/assets/javascripts/app/templates/repositories/list.hbs +++ b/assets/javascripts/app/templates/repositories/list.hbs @@ -1,11 +1,9 @@ -{{#if content.lastObject.isLoaded}} -
    - {{#each repository in content}} - {{#view Travis.Views.RepositoriesItemView tagName="li" classBinding="classes" contextBinding="repository"}} - +
      + {{#each repository in content}} + {{#view Travis.Views.RepositoriesItemView contextBinding="repository"}} +
    • + {{slug}} + #{{lastBuildNumber}}

      {{t repositories.duration}}: @@ -17,7 +15,11 @@

      {{description}}

      {{/if}} - {{/view}} - {{/each}} -
        -{{/if}} + + {{/view}} + {{else}} +
      • +

        Loading

        +
      • + {{/each}} +
          diff --git a/assets/javascripts/app/templates/repositories/show.hbs b/assets/javascripts/app/templates/repositories/show.hbs index f67b921a..4e4eb3be 100644 --- a/assets/javascripts/app/templates/repositories/show.hbs +++ b/assets/javascripts/app/templates/repositories/show.hbs @@ -1,19 +1,17 @@ -
          -

          - {{slug}} -

          +{{#unless isLoaded}} + Loading ... +{{else}} +
          +

          + {{slug}} +

          -

          {{description}}

          +

          {{description}}

          - - - {{outlet tabs}} - -
          - {{outlet tab}} +
          -
          +{{/unless}} diff --git a/assets/javascripts/app/templates/repositories/tabs.hbs b/assets/javascripts/app/templates/repositories/tabs.hbs index cc402884..b18d35f9 100644 --- a/assets/javascripts/app/templates/repositories/tabs.hbs +++ b/assets/javascripts/app/templates/repositories/tabs.hbs @@ -1,10 +1,35 @@ + +
          + +
          +

          +

          +

          +

          +

          +
          +
          diff --git a/assets/javascripts/app/templates/sponsors/decks.hbs b/assets/javascripts/app/templates/sponsors/decks.hbs new file mode 100644 index 00000000..4608e395 --- /dev/null +++ b/assets/javascripts/app/templates/sponsors/decks.hbs @@ -0,0 +1,19 @@ +

          {{t layouts.application.sponsers}}

          + +
            + {{#each deck in sponsors.decks}} + {{#each deck}} +
          • + + + +
          • + {{/each}} + {{/each}} +
          + +

          + + {{{t layouts.application.sponsors_link}}} + +

          diff --git a/assets/javascripts/app/templates/sponsors/links.hbs b/assets/javascripts/app/templates/sponsors/links.hbs new file mode 100644 index 00000000..1e93c187 --- /dev/null +++ b/assets/javascripts/app/templates/sponsors/links.hbs @@ -0,0 +1,18 @@ +
          +

          {{t layouts.application.sponsers}}

          + +
            + {{#each sponsors.links}} +
          • + {{{link}}} +
          • + {{/each}} +
          + +

          + + {{{t layouts.application.sponsors_link}}} + +

          +
          + diff --git a/assets/javascripts/app/templates/stats/show.hbs b/assets/javascripts/app/templates/stats/show.hbs new file mode 100644 index 00000000..f73815f4 --- /dev/null +++ b/assets/javascripts/app/templates/stats/show.hbs @@ -0,0 +1 @@ +Stats diff --git a/assets/javascripts/app/templates/workers/list.hbs b/assets/javascripts/app/templates/workers/list.hbs new file mode 100644 index 00000000..0f0782a5 --- /dev/null +++ b/assets/javascripts/app/templates/workers/list.hbs @@ -0,0 +1,22 @@ +

          {{t workers}}

          +
            + {{#each group in workers.groups}} +
          • +
            {{group.firstObject.host}}
            +
              + {{#each group}} +
            • + {{#if isTesting}} + {{display}} + {{else}} + {{display}} + {{/if}} +
            • + {{/each}} +
            +
          • + {{else}} + No workers + {{/each}} +
          + diff --git a/assets/javascripts/app/views.coffee b/assets/javascripts/app/views.coffee index 8cfbec48..54368abe 100644 --- a/assets/javascripts/app/views.coffee +++ b/assets/javascripts/app/views.coffee @@ -1,63 +1,26 @@ -Travis.Views = - ApplicationView: Em.View.extend - templateName: 'application' +require 'ext/ember/namespace' - RepositoriesView: Em.View.extend - templateName: 'repositories/list' +@Travis.Views = Em.Namespace.create + HomeLayout: Em.View.extend(templateName: 'layouts/home') + ProfileLayout: Em.View.extend(templateName: 'layouts/simple') + StatsLayout: Em.View.extend(templateName: 'layouts/simple') - RepositoriesItemView: Em.View.extend - classes: (-> - color = Travis.Helpers.colorForResult(@getPath('context.lastBuildResult')) - classes = ['repository', color] - classes.push 'selected' if @getPath('context.selected') - classes.join(' ') - ).property('context.lastBuildResult', 'context.selected') + StatsView: Em.View.extend(templateName: 'stats/show') - lastBuild: (-> - owner: @getPath('context.owner') - name: @getPath('context.name') - build_id: @getPath('context.lastBuildId') - ).property() + SidebarView: Em.View.extend + templateName: 'layouts/sidebar' - RepositoryView: Em.View.extend - templateName: 'repositories/show' + toggleSidebar: -> + $('body').toggleClass('maximized') + # TODO gotta force redraw here :/ + element = $('') + $('#repository').append(element) + Em.run.later (-> element.remove()), 10 - TabsView: Em.View.extend - templateName: 'repositories/tabs' - - HistoryView: Em.View.extend - templateName: 'builds/list' - - BuildsItemView: Em.View.extend - classes: (-> - Travis.Helpers.colorForResult(@getPath('context.result')) - ).property('context.result') - - BuildView: Em.View.extend - templateName: 'builds/show' - - classes: (-> - Helpers.colorForResult(@get('result')) - ).property('result') - - requiredJobs: (-> - @getPath('context.jobs').filter((job) -> job.get('allow_failure') != true) - ).property() # TODO same here with binding to 'context.data.job_ids' - - allowedFailureJobs: (-> - @getPath('context.jobs').filter((job) -> job.get('allow_failure')) - ).property() - - JobsView: Em.View.extend - templateName: 'jobs/list' - - JobView: Em.View.extend - templateName: 'jobs/show' - - classes: (-> - Travis.Helpers.colorForResult(@get('result')) - ).property('result') - - LogView: Em.View.extend - templateName: 'jobs/log' +require 'views/build' +require 'views/job' +require 'views/repo' +require 'views/profile' +require 'views/tabs' +require 'views/top' diff --git a/assets/javascripts/app/views/build.coffee b/assets/javascripts/app/views/build.coffee new file mode 100644 index 00000000..5b162257 --- /dev/null +++ b/assets/javascripts/app/views/build.coffee @@ -0,0 +1,33 @@ +@Travis.Views.reopen + BuildsView: Em.View.extend + templateName: 'builds/list' + + BuildsItemView: Em.View.extend + color: (-> + Travis.Helpers.colorForResult(@getPath('context.result')) + ).property('context.result') + + urlBuild: (-> + Travis.Urls.build(@getPath('context.repository'), @get('context')) + ).property('context.repository.slug', 'context') + + BuildView: Em.View.extend + templateName: 'builds/show' + + color: (-> + Travis.Helpers.colorForResult(@getPath('controller.content.result')) + ).property('controller.content.result') + + requiredJobs: (-> + @getPath('controller.content.jobs').filter((job) -> job.get('allow_failure') != true) + ).property('controller.content') # TODO same here with binding to 'context.data.job_ids' + + allowedFailureJobs: (-> + @getPath('controller.content.jobs').filter((job) -> job.get('allow_failure')) + ).property('controller.content') + + urlBuild: (-> + Travis.Urls.build(@getPath('context.repository'), @get('context')) + ).property('controller.content.repository.id', 'controller.content.id') + + diff --git a/assets/javascripts/app/views/job.coffee b/assets/javascripts/app/views/job.coffee new file mode 100644 index 00000000..af04f54e --- /dev/null +++ b/assets/javascripts/app/views/job.coffee @@ -0,0 +1,30 @@ +@Travis.Views.reopen + JobsView: Em.View.extend + templateName: 'jobs/list' + + toggleHelp: -> + $.facebox(div: '#allow_failure_help') + + JobsItemView: Em.View.extend + color: (-> + Travis.Helpers.colorForResult(@getPath('controller.result')) + ).property('controller.result') + + urlJob: (-> + Travis.Urls.job(@getPath('context.repository'), @get('context')) + ).property('context.repository', 'context') + + JobView: Em.View.extend + templateName: 'jobs/show' + + color: (-> + Travis.Helpers.colorForResult(@getPath('controller.content.result')) + ).property('controller.content.result') + + urlJob: (-> + Travis.Urls.job(@getPath('context.repository'), @get('context')) + ).property('controller.content.repository.id', 'controller.content.id') + + LogView: Em.View.extend + templateName: 'jobs/log' + diff --git a/assets/javascripts/app/views/profile.coffee b/assets/javascripts/app/views/profile.coffee new file mode 100644 index 00000000..bc46e367 --- /dev/null +++ b/assets/javascripts/app/views/profile.coffee @@ -0,0 +1,11 @@ +@Travis.Views.reopen + UserView: Em.View.extend + templateName: 'profile/show' + + gravatarUrl: (-> + "http://www.gravatar.com/avatar/#{@getPath('controller.content.gravatar')}?s=48&d=mm" + ).property('controller.content.gravatar') + + HooksView: Em.View.extend + templateName: 'profile/hooks' + diff --git a/assets/javascripts/app/views/repo.coffee b/assets/javascripts/app/views/repo.coffee new file mode 100644 index 00000000..5ef7be9b --- /dev/null +++ b/assets/javascripts/app/views/repo.coffee @@ -0,0 +1,29 @@ +@Travis.Views.reopen + RepositoriesView: Em.View.extend + templateName: 'repositories/list' + + RepositoriesItemView: Em.View.extend + classes: (-> + $.compact(['repository', @get('color'), @get('selected')]).join(' ') + ).property('context.lastBuildResult', 'context.selected') + + color: (-> + Travis.Helpers.colorForResult(@getPath('context.lastBuildResult')) + ).property('context.lastBuildResult') + + selected: (-> + 'selected' if @getPath('context.selected') + ).property('context.selected') + + urlRepository: (-> + Travis.Urls.repository(@get('context')) + ).property('context') + + urlLastBuild: (-> + Travis.Urls.lastBuild(@get('context')) + ).property('context') + + RepositoryView: Em.View.extend + templateName: 'repositories/show' + + diff --git a/assets/javascripts/app/views/tabs.coffee b/assets/javascripts/app/views/tabs.coffee new file mode 100644 index 00000000..ed6d1429 --- /dev/null +++ b/assets/javascripts/app/views/tabs.coffee @@ -0,0 +1,41 @@ +@Travis.Views.reopen + TabsView: Em.View.extend + templateName: 'repositories/tabs' + + toggleTools: -> + $('#tools .pane').toggle() + + # hrm. how to parametrize bindAttr? + classCurrent: (-> + 'active' if @getPath('controller.tab') == 'current' + ).property('controller.tab') + + classBuilds: (-> + 'active' if @getPath('controller.tab') == 'builds' + ).property('controller.tab') + + classBuild: (-> + 'active' if @getPath('controller.tab') == 'build' + ).property('controller.tab') + + classJob: (-> + 'active' if @getPath('controller.tab') == 'job' + ).property('controller.tab') + + urlRepository: (-> + Travis.Urls.repository(@getPath('controller.repository')) + ).property('controller.repository.id') + + urlBuilds: (-> + Travis.Urls.builds(@getPath('controller.repository')) + ).property('controller.repository.id') + + urlBuild: (-> + Travis.Urls.build(@getPath('controller.repository'), @getPath('controller.build')) + ).property('controller.repository.slug', 'controller.build.id') + + urlJob: (-> + Travis.Urls.job(@getPath('controller.repository'), @getPath('controller.job')) + ).property('controller.repository.slug', 'controller.job.id') + + diff --git a/assets/javascripts/app/views/top.coffee b/assets/javascripts/app/views/top.coffee new file mode 100644 index 00000000..f6a2a224 --- /dev/null +++ b/assets/javascripts/app/views/top.coffee @@ -0,0 +1,34 @@ +@Travis.Views.reopen + TopView: Em.View.extend + templateName: 'layouts/top' + + # currentUser: (-> + # Travis.app.currentUser + # ).property('Travis.app.currentUser') + + signInSuccess: (response) -> + console.log(response) + + gravatarUrl: (-> + "http://www.gravatar.com/avatar/#{@getPath('controller.user.gravatar')}?s=24&d=mm" + ).property('controller.user.gravatar') + + # hrm. how to parametrize bindAttr? + classHome: (-> + 'active' if @getPath('controller.tab') == 'home' + ).property('controller.tab') + + classStats: (-> + 'active' if @getPath('controller.tab') == 'stats' + ).property('controller.tab') + + classProfile: (-> + if @getPath('controller.tab') == 'profile' then 'profile active' else 'profile' + ).property('controller.tab') + + showProfile: -> + $('#top .profile ul').show() + + hideProfile: -> + $('#top .profile ul').hide() + diff --git a/assets/javascripts/data/sponsors.coffee b/assets/javascripts/data/sponsors.coffee new file mode 100644 index 00000000..400e541b --- /dev/null +++ b/assets/javascripts/data/sponsors.coffee @@ -0,0 +1,44 @@ +@Travis.SPONSORS = [ + { type: 'platinum', url: "http://www.wooga.com", image: "wooga-205x130.png" } + { type: 'platinum', url: "http://bendyworks.com", image: "bendyworks-205x130.png" } + { type: 'platinum', url: "http://cloudcontrol.com", image: "cloudcontrol-205x130.png" } + { type: 'platinum', url: "http://xing.de", image: "xing-205x130.png" } + + { type: 'gold', url: "http://heroku.com", image: "heroku-205x60.png" } + { type: 'gold', url: "http://soundcloud.com", image: "soundcloud-205x60.png" } + { type: 'gold', url: "http://nedap.com", image: "nedap-205x60.png" } + { type: 'gold', url: "http://mongohq.com", image: "mongohq-205x60.png" } + { type: 'gold', url: "http://zweitag.de", image: "zweitag-205x60.png" } + { type: 'gold', url: "http://kanbanery.com", image: "kanbanery-205x60.png" } + { type: 'gold', url: "http://ticketevolution.com", image: "ticketevolution-205x60.jpg" } + { type: 'gold', url: "http://plan.io/travis", image: "planio-205x60.png" } + + { type: 'silver', link: "Cobot: The one tool to run your coworking space" } + { type: 'silver', link: "JumpstartLab: We build developers" } + { type: 'silver', link: "Evil Martians: Agile Ruby on Rails development" } + { type: 'silver', link: "Zendesk: Love your helpdesk" } + { type: 'silver', link: "Stripe: Payments for developers" } + { type: 'silver', link: "Basho: We make Riak!" } + { type: 'silver', link: "Relevance: We deliver software solutions" } + { type: 'silver', link: "Mindmatters: Software für Menschen" } + { type: 'silver', link: "Amen: The best and worst of everything" } + { type: 'silver', link: "Site5: Premium Web Hosting Solutions" } + { type: 'silver', link: "Crowd Interactive: Leading Rails consultancy in Mexico" } + { type: 'silver', link: "Atomic Object: Work with really smart people" } + { type: 'silver', link: "Codeminer: smart services for your startup" } + { type: 'silver', link: "Cloudant: grow into your data layer, not out of it" } + { type: 'silver', link: "Gidsy: Explore, organize & book unique things to do!" } + { type: 'silver', link: "5apps: Package & deploy HTML5 apps automatically" } + { type: 'silver', link: "Meltmedia: We are Interactive Superheroes" } + { type: 'silver', link: "Fingertips offers design and development services" } + { type: 'silver', link: "Engine Yard: Build epic apps, let us handle the rest" } + { type: 'silver', link: "Malwarebytes: Defeat Malware once and for all." } + { type: 'silver', link: "Readmill: The best reading app on the iPad." } + { type: 'silver', link: "Medidata: clinical tech improving quality of life" } + { type: 'silver', link: "ESM: Japan's best agile Ruby/Rails consultancy" } + { type: 'silver', link: "Twitter: instantly connects people everywhere" } + { type: 'silver', link: "AGiLE ANiMAL: we <3 Travis CI." } + { type: 'silver', link: "Tupalo: Discover, review & share local businesses." } +] + + diff --git a/assets/javascripts/lib/ext/ember/namespace.js b/assets/javascripts/lib/ext/ember/namespace.js new file mode 100644 index 00000000..52f4d0e3 --- /dev/null +++ b/assets/javascripts/lib/ext/ember/namespace.js @@ -0,0 +1,3 @@ +Em.Namespace.reopen = Em.Namespace.reopenClass + + diff --git a/assets/javascripts/lib/ext/jquery.coffee b/assets/javascripts/lib/ext/jquery.coffee index 2f4f0678..4bef8fc8 100644 --- a/assets/javascripts/lib/ext/jquery.coffee +++ b/assets/javascripts/lib/ext/jquery.coffee @@ -40,29 +40,28 @@ $.fn.extend $.extend keys: (obj) -> keys = [] - $.each obj, (key) -> - keys.push key - + $.each obj, (key) -> keys.push key keys values: (obj) -> values = [] - $.each obj, (key, value) -> - values.push value - + $.each obj, (key, value) -> values.push value values + underscore: (string) -> + string[0].toLowerCase() + string.substring(1).replace /([A-Z])?/g, (match, chr) -> + if chr then "_#{chr.toUpperCase()}" else '' + camelize: (string, uppercase) -> - string = $.capitalize(string) if uppercase or typeof uppercase is 'undefined' + string = if uppercase == false then $.underscore(string) else $.capitalize(string) string.replace /_(.)?/g, (match, chr) -> - (if chr then chr.toUpperCase() else '') + if chr then chr.toUpperCase() else '' capitalize: (string) -> string[0].toUpperCase() + string.substring(1) compact: (array) -> - $.grep array, (value) -> - !!value + $.grep array, (value) -> !!value all: (array, callback) -> args = Array::slice.apply(arguments) @@ -121,6 +120,10 @@ $.extend result[key] = object[key] if keys.indexOf(key) is -1 result + intersect: (array, other) -> + array.filter (element) -> + other.indexOf(element) != -1 + map: (elems, callback, arg) -> value = undefined key = undefined @@ -139,5 +142,15 @@ $.extend ret[ret.length] = value if value? ret.concat.apply [], ret + shuffle: (array) -> + array = array.slice() + top = array.length + while top && --top + current = Math.floor(Math.random() * (top + 1)) + tmp = array[current] + array[current] = array[top] + array[top] = tmp + array + truncate: (string, length) -> if string.length > length then string.trim().substring(0, length) + '...' else string diff --git a/assets/javascripts/lib/mocks.coffee b/assets/javascripts/lib/mocks.coffee index b4d12f90..e775c861 100644 --- a/assets/javascripts/lib/mocks.coffee +++ b/assets/javascripts/lib/mocks.coffee @@ -1,29 +1,35 @@ +require 'ext/jquery' + +responseTime = 0 + repositories = [ - { id: 1, owner: 'travis-ci', name: 'travis-core', slug: 'travis-ci/travis-core', build_ids: [1, 2], last_build_id: 1, last_build_number: 1, last_build_result: 0 }, - { id: 2, owner: 'travis-ci', name: 'travis-assets', slug: 'travis-ci/travis-assets', build_ids: [3], last_build_id: 3, last_build_number: 3}, - { id: 3, owner: 'travis-ci', name: 'travis-hub', slug: 'travis-ci/travis-hub', build_ids: [4], last_build_id: 4, last_build_number: 4}, + { id: 1, owner: 'travis-ci', name: 'travis-core', slug: 'travis-ci/travis-core', build_ids: [1, 2], last_build_id: 1, last_build_number: 1, last_build_result: 0, description: 'Description of travis-core' }, + { id: 2, owner: 'travis-ci', name: 'travis-assets', slug: 'travis-ci/travis-assets', build_ids: [3], last_build_id: 3, last_build_number: 3, last_build_result: 1, description: 'Description of travis-assets'}, + { id: 3, owner: 'travis-ci', name: 'travis-hub', slug: 'travis-ci/travis-hub', build_ids: [4], last_build_id: 4, last_build_number: 4, description: 'Description of travis-hub'}, ] builds = [ - { id: 1, repository_id: 'travis-ci/travis-core', commit_id: 1, job_ids: [1, 2], number: 1, event_type: 'push', config: { rvm: ['rbx', '1.9.3'] }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 0 }, - { id: 2, repository_id: 'travis-ci/travis-core', commit_id: 2, job_ids: [3], number: 2, event_type: 'push', config: { rvm: ['rbx'] } }, - { id: 3, repository_id: 'travis-ci/travis-assets', commit_id: 3, job_ids: [4], number: 3, event_type: 'push', config: { rvm: ['rbx'] }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 0 }, - { id: 4, repository_id: 'travis-ci/travis-hub', commit_id: 4, job_ids: [5], number: 4, event_type: 'push', config: { rvm: ['rbx'] } }, + { id: 1, repository_id: '1', commit_id: 1, job_ids: [1, 2], number: 1, event_type: 'push', config: { rvm: ['rbx', '1.9.3'] }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 0 }, + { id: 2, repository_id: '1', commit_id: 2, job_ids: [3], number: 2, event_type: 'push', config: { rvm: ['rbx'] } }, + { id: 3, repository_id: '2', commit_id: 3, job_ids: [4], number: 3, event_type: 'push', config: { rvm: ['rbx'] }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 1 }, + { id: 4, repository_id: '3', commit_id: 4, job_ids: [5], number: 4, event_type: 'push', config: { rvm: ['rbx'] } }, ] commits = [ - { id: 1, sha: '1234567', branch: 'master', message: 'commit message 1', author_name: 'author name', author_email: 'author@email.com', compare_url: 'http://github.com/compare/0123456..1234567' }, - { id: 2, sha: '2345678', branch: 'feature', message: 'commit message 2', author_name: 'author name', author_email: 'author@email.com', compare_url: 'http://github.com/compare/0123456..2345678' }, - { id: 3, sha: '3456789', branch: 'master', message: 'commit message 3', author_name: 'author name', author_email: 'author@email.com', compare_url: 'http://github.com/compare/0123456..3456789' }, - { id: 4, sha: '4567890', branch: 'master', message: 'commit message 4', author_name: 'author name', author_email: 'author@email.com', compare_url: 'http://github.com/compare/0123456..4567890' }, + { id: 1, sha: '1234567', branch: 'master', message: 'commit message 1', author_name: 'author name', author_email: 'author@email.com', committer_name: 'committer name', committer_email: 'committer@email.com', compare_url: 'http://github.com/compare/0123456..1234567' }, + { id: 2, sha: '2345678', branch: 'feature', message: 'commit message 2', author_name: 'author name', author_email: 'author@email.com', committer_name: 'committer name', committer_email: 'committer@email.com', compare_url: 'http://github.com/compare/0123456..2345678' }, + { id: 3, sha: '3456789', branch: 'master', message: 'commit message 3', author_name: 'author name', author_email: 'author@email.com', committer_name: 'committer name', committer_email: 'committer@email.com', compare_url: 'http://github.com/compare/0123456..3456789' }, + { id: 4, sha: '4567890', branch: 'master', message: 'commit message 4', author_name: 'author name', author_email: 'author@email.com', committer_name: 'committer name', committer_email: 'committer@email.com', compare_url: 'http://github.com/compare/0123456..4567890' }, ] jobs = [ { id: 1, repository_id: 1, build_id: 1, commit_id: 1, log_id: 1, number: '1.1', config: { rvm: 'rbx' }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 0 } - { id: 2, repository_id: 1, build_id: 1, commit_id: 1, log_id: 2, number: '1.2', config: { rvm: '1.9.3' } } + { id: 2, repository_id: 1, build_id: 1, commit_id: 1, log_id: 2, number: '1.2', config: { rvm: '1.9.3' }, allow_failure: true } { id: 3, repository_id: 1, build_id: 2, commit_id: 2, log_id: 3, number: '2.1', config: { rvm: 'rbx' } } - { id: 4, repository_id: 2, build_id: 3, commit_id: 3, log_id: 4, number: '3.1', config: { rvm: 'rbx' }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 0 } + { id: 4, repository_id: 2, build_id: 3, commit_id: 3, log_id: 4, number: '3.1', config: { rvm: 'rbx' }, finished_at: '2012-06-20T00:21:20Z', duration: 35, result: 1 } { id: 5, repository_id: 3, build_id: 4, commit_id: 4, log_id: 5, number: '4.1', config: { rvm: 'rbx' } } + { id: 6, repository_id: 1, build_id: 5, commit_id: 5, log_id: 5, number: '5.1', config: { rvm: 'rbx' }, state: 'created', queue: 'builds.common' } + { id: 7, repository_id: 1, build_id: 5, commit_id: 5, log_id: 5, number: '5.2', config: { rvm: 'rbx' }, state: 'created', queue: 'builds.common' } ] artifacts = [ @@ -34,21 +40,33 @@ artifacts = [ { id: 5, body: 'log 4' } ] +workers = [ + { id: 1, name: 'ruby-1', host: 'worker.travis-ci.org', state: 'ready' } + { id: 2, name: 'ruby-2', host: 'worker.travis-ci.org', state: 'ready' } +] + +hooks = [ + { slug: 'travis-ci/travis-core', description: 'description of travis-core', active: true, private: false } + { slug: 'travis-ci/travis-assets', description: 'description of travis-assets', active: false, private: false } + { slug: 'svenfuchs/minimal', description: 'description of minimal', active: true, private: false } +] + + $.mockjax url: '/repositories' - responseTime: 0 + responseTime: responseTime responseText: { repositories: repositories } for repository in repositories $.mockjax url: '/' + repository.slug - responseTime: 0 + responseTime: responseTime responseText: { repository: repository } for build in builds $.mockjax url: '/builds/' + build.id - responseTime: 0 + responseTime: responseTime responseText: build: build, commit: commits[build.commit_id - 1] @@ -57,8 +75,8 @@ for build in builds for repository in repositories $.mockjax url: '/builds' - data: { repository_id: 1, event_type: 'push', orderBy: 'number DESC' } - responseTime: 0 + data: { repository_id: repository.id, event_type: 'push', orderBy: 'number DESC' } + responseTime: responseTime responseText: builds: (builds[id - 1] for id in repository.build_ids) commits: (commits[builds[id - 1].commit_id - 1] for id in repository.build_ids) @@ -66,7 +84,7 @@ for repository in repositories for job in jobs $.mockjax url: '/jobs/' + job.id - responseTime: 0 + responseTime: responseTime responseText: job: job, commit: commits[job.commit_id - 1] @@ -74,8 +92,23 @@ for job in jobs for artifact in artifacts $.mockjax url: '/artifacts/' + artifact.id - responseTime: 0 + responseTime: responseTime responseText: artifact: artifact +$.mockjax + url: '/workers' + responseTime: responseTime + responseText: { workers: workers } + +$.mockjax + url: '/jobs' + responseTime: responseTime + responseText: + jobs: $.select(jobs, (job) -> job.state == 'created') + +$.mockjax + url: '/profile/hooks' + responseTime: responseTime + responseText: { hooks: hooks } diff --git a/assets/javascripts/lib/travis/ticker.coffee b/assets/javascripts/lib/travis/ticker.coffee index fb889503..b85506d0 100644 --- a/assets/javascripts/lib/travis/ticker.coffee +++ b/assets/javascripts/lib/travis/ticker.coffee @@ -1,18 +1,16 @@ @Travis.Ticker = Ember.Object.extend init: -> - @_super() - @schedule() + @schedule() unless @get('interval') == -1 + tick: -> context = @get('context') - @get('targets').forEach (target) => - target = context.get(target) - return unless target - if target.forEach - target.forEach (target) -> target.tick() - else - target.tick() + targets = @get('targets') || [@get('target')] + for target in targets + target = context.get(target) if context + target.tick() if target @schedule() + schedule: -> - Ember.run.later((=> @tick()), Travis.app.TICK_INTERVAL) + Ember.run.later((=> @tick()), @get('interval') || Travis.app.TICK_INTERVAL) diff --git a/assets/javascripts/spec/current_spec.coffee b/assets/javascripts/spec/current_spec.coffee index ed7d6c52..71b26f14 100644 --- a/assets/javascripts/spec/current_spec.coffee +++ b/assets/javascripts/spec/current_spec.coffee @@ -1,7 +1,7 @@ describe 'The current build tab', -> describe 'on the "index" state', -> beforeEach -> - app '/' + app '' waitFor buildRendered it 'displays the build summary', -> @@ -15,17 +15,25 @@ describe 'The current build tab', -> message: 'commit message 1' describe 'given the current build has a job matrix', -> - it 'displays the build matrix table', -> - displaysBuildMatrix + it 'displays the jobs matrix table', -> + displaysJobMatrix + element: '#jobs' headers: ['Job', 'Duration', 'Finished', 'Rvm'] jobs: [ - { number: '#1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, - { number: '#1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } + { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, + ] + + it 'displays the allowed failure jobs matrix table', -> + displaysJobMatrix + element: '#allowed_failure_jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } ] describe 'on the "current" state', -> beforeEach -> - app '/travis-ci/travis-core' + app '!/travis-ci/travis-core' waitFor repositoriesRendered waitFor buildRendered @@ -40,10 +48,18 @@ describe 'The current build tab', -> message: 'commit message 1' describe 'given the current build has a job matrix', -> - it 'displays the build matrix table', -> - displaysBuildMatrix + it 'displays the jobs matrix table', -> + displaysJobMatrix + element: '#jobs' headers: ['Job', 'Duration', 'Finished', 'Rvm'] jobs: [ - { number: '#1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, - { number: '#1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } + { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, + ] + + it 'displays the allowed failure jobs matrix table', -> + displaysJobMatrix + element: '#allowed_failure_jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } ] diff --git a/assets/javascripts/spec/repositories_spec.coffee b/assets/javascripts/spec/repositories_spec.coffee index a695ff70..07624edc 100644 --- a/assets/javascripts/spec/repositories_spec.coffee +++ b/assets/javascripts/spec/repositories_spec.coffee @@ -1,13 +1,13 @@ describe 'The repositories list', -> beforeEach -> - app '/' + app '' waitFor repositoriesRendered it 'lists repositories', -> - href = $('#repositories a.slug').attr('href') - expect(href).toEqual '#/travis-ci/travis-core' + href = $('#repositories a.current').attr('href') + expect(href).toEqual '#!/travis-ci/travis-core' it "links to the repository's last build action", -> href = $('#repositories a.last_build').attr('href') - expect(href).toEqual '#/travis-ci/travis-core/builds/1' + expect(href).toEqual '#!/travis-ci/travis-core/builds/1' diff --git a/assets/javascripts/spec/repository_spec.coffee b/assets/javascripts/spec/repository_spec.coffee index 35506ac3..fc8b3f40 100644 --- a/assets/javascripts/spec/repository_spec.coffee +++ b/assets/javascripts/spec/repository_spec.coffee @@ -1,6 +1,6 @@ describe 'The repository view', -> beforeEach -> - app '/' + app '' waitFor repositoriesRendered it 'displays the repository header', -> diff --git a/assets/javascripts/spec/spec_helper.coffee b/assets/javascripts/spec/spec_helper.coffee index 7903a849..c762c9d5 100644 --- a/assets/javascripts/spec/spec_helper.coffee +++ b/assets/javascripts/spec/spec_helper.coffee @@ -2,18 +2,12 @@ minispade.require 'app' @reset = -> Travis.app.destroy() if Travis.app - $('body #content').empty() + $('#content').remove() + $('body').append('
          ') @app = (url) -> - router = Travis.Router.create - location: Em.NoneLocation.create() - - Travis.app = Travis.App.create() - Travis.app.set('rootElement', '#content') - Travis.app.initialize(router) - - router.route(url) - -beforeEach -> reset() + Em.run -> + Travis.run(rootElement: $('#content')) + Em.routes.set('location', url) diff --git a/assets/javascripts/spec/support/conditions.coffee b/assets/javascripts/spec/support/conditions.coffee index 2b7a0ccb..8ed592cc 100644 --- a/assets/javascripts/spec/support/conditions.coffee +++ b/assets/javascripts/spec/support/conditions.coffee @@ -1,8 +1,8 @@ @repositoriesRendered = -> - $('#repositories li').length > 0 + $('#repositories li a.current').text() != '' @buildRendered = -> - $('#build .summary .number').text() != '' + $('#summary .number').text() != '' @matrixRendered = -> $('#jobs').text() != '' diff --git a/assets/javascripts/spec/support/expectations.coffee b/assets/javascripts/spec/support/expectations.coffee index f75240d4..972e0826 100644 --- a/assets/javascripts/spec/support/expectations.coffee +++ b/assets/javascripts/spec/support/expectations.coffee @@ -1,51 +1,51 @@ @displaysBuildSummary = (data) -> - element = $('#build .summary .number a') - expect(element.attr('href')).toEqual "#/#{data.repo}/builds/#{data.id}" + element = $('#summary .number a') + expect(element.attr('href')).toEqual "#!/#{data.repo}/builds/#{data.id}" - element = $('#build .summary .finished_at') + element = $('#summary .finished_at') expect(element.text()).toMatch /\d+ (\w+) ago/ - element = $('#build .summary .duration') + element = $('#summary .duration') expect(element.text()).toEqual data.duration - element = $('#build .summary .commit a') + element = $('#summary .commit a') expect(element.attr('href')).toEqual "http://github.com/#{data.repo}/commit/#{data.commit}" - element = $('#build .summary .commit a') + element = $('#summary .commit a') expect(element.text()).toEqual "#{data.commit} (#{data.branch})" - element = $('#build .summary .compare a') + element = $('#summary .compare a') expect(element.attr('href')).toEqual "http://github.com/compare/#{data.compare}" - element = $('#build .summary .compare a') + element = $('#summary .compare a') expect(element.text()).toEqual data.compare - element = $('#build .summary .message') + element = $('#summary .message') expect(element.text()).toEqual data.message -@displaysBuildMatrix = (data) -> - headers = ($(element).text() for element in $('#jobs thead th')) +@displaysJobMatrix = (data) -> + headers = ($(element).text() for element in $("#{data.element} thead th")) expect(headers).toEqual(data.headers) $.each data.jobs, (ix, job) -> ix = (ix + 1) * 3 # cuz metamorph is adding two script elements - element = $("#jobs tr:nth-child(#{ix}) td.number") + element = $("#{data.element} tr:nth-child(#{ix}) td.number") expect(element.text()).toEqual job.number - element = $("#jobs tr:nth-child(#{ix}) td.number a") - expect(element.attr('href')).toEqual "#/#{job.repo}/jobs/#{job.id}" + element = $("#{data.element} tr:nth-child(#{ix}) td.number a") + expect(element.attr('href')).toEqual "#!/#{job.repo}/jobs/#{job.id}" - element = $("#jobs tr:nth-child(#{ix}) td.duration") + element = $("#{data.element} tr:nth-child(#{ix}) td.duration") expect(element.text()).toEqual job.duration - element = $("#jobs tr:nth-child(#{ix}) td.finished_at") + element = $("#{data.element} tr:nth-child(#{ix}) td.finished_at") if job.finishedAt == '-' expect(element.text()).toEqual '-' else expect(element.text()).toMatch job.finishedAt - element = $("#jobs tr:nth-child(#{ix}) td:nth-child(6)") + element = $("#{data.element} tr:nth-child(#{ix}) td:nth-child(6)") expect(element.text()).toEqual job.rvm diff --git a/assets/javascripts/spec/tabs_spec.coffee b/assets/javascripts/spec/tabs_spec.coffee index 5eb074a1..30a18746 100644 --- a/assets/javascripts/spec/tabs_spec.coffee +++ b/assets/javascripts/spec/tabs_spec.coffee @@ -1,23 +1,25 @@ -# describe 'The tabs view', -> -# describe 'on the "index" state', -> -# beforeEach -> -# app '/' -# waitFor repositoriesRendered -# -# it 'has a "current" tab linking to the current build', -> -# href = $('#main .tabs a.current').attr('href') -# expect(href).toEqual '/travis-ci/travis-core' -# -# it 'has a "history" tab linking to the builds list', -> -# href = $('#main .tabs a.history').attr('href') -# expect(href).toEqual '/travis-ci/travis-core/builds' -# -# describe 'on the "current" state', -> -# app '/travis-ci/travis-core' -# waitFor repositoriesRendered -# -# it 'has a "current" tab linking to the current build', -> -# href = $('#main .tabs a.current').attr('href') -# expect(href).toEqual '/travis-ci/travis-core' -# -# +describe 'The tabs view', -> + describe 'on the "index" state', -> + beforeEach -> + app '' + waitFor repositoriesRendered + + it 'has a "current" tab linking to the current build', -> + href = $('#tab_current a').attr('href') + expect(href).toEqual '#!/travis-ci/travis-core' + + it 'has a "history" tab linking to the builds list', -> + href = $('#tab_builds a').attr('href') + expect(href).toEqual '#!/travis-ci/travis-core/builds' + + describe 'on the "current" state', -> + beforeEach -> + app '!/travis-ci/travis-core' + waitFor repositoriesRendered + waitFor buildRendered + + it 'has a "current" tab linking to the current build', -> + href = $('#tab_current a').attr('href') + expect(href).toEqual '#!/travis-ci/travis-core' + + diff --git a/assets/javascripts/spec/vendor/jasmine.css b/assets/javascripts/spec/vendor/jasmine.css new file mode 100644 index 00000000..705dd7d6 --- /dev/null +++ b/assets/javascripts/spec/vendor/jasmine.css @@ -0,0 +1,79 @@ +#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } +#HTMLReporter a { text-decoration: none; } +#HTMLReporter a:hover { text-decoration: underline; } +#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; } +#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; } +#HTMLReporter #jasmine_content { position: fixed; right: 100%; } +#HTMLReporter .version { color: #aaaaaa; } +#HTMLReporter .banner { margin-top: 14px; } +#HTMLReporter .duration { color: #aaaaaa; float: right; } +#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; } +#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; } +#HTMLReporter .symbolSummary li.passed { font-size: 14px; } +#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; } +#HTMLReporter .symbolSummary li.failed { line-height: 9px; } +#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; } +#HTMLReporter .symbolSummary li.skipped { font-size: 14px; } +#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; } +#HTMLReporter .symbolSummary li.pending { line-height: 11px; } +#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; } +#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +#HTMLReporter .runningAlert { background-color: #666666; } +#HTMLReporter .skippedAlert { background-color: #aaaaaa; } +#HTMLReporter .skippedAlert:first-child { background-color: #333333; } +#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; } +#HTMLReporter .passingAlert { background-color: #a6b779; } +#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; } +#HTMLReporter .failingAlert { background-color: #cf867e; } +#HTMLReporter .failingAlert:first-child { background-color: #b03911; } +#HTMLReporter .results { margin-top: 14px; } +#HTMLReporter #details { display: none; } +#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; } +#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +#HTMLReporter.showDetails .summary { display: none; } +#HTMLReporter.showDetails #details { display: block; } +#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +#HTMLReporter .summary { margin-top: 14px; } +#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; } +#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; } +#HTMLReporter .summary .specSummary.failed a { color: #b03911; } +#HTMLReporter .description + .suite { margin-top: 0; } +#HTMLReporter .suite { margin-top: 14px; } +#HTMLReporter .suite a { color: #333333; } +#HTMLReporter #details .specDetail { margin-bottom: 28px; } +#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; } +#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; } +#HTMLReporter .resultMessage span.result { display: block; } +#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } + +#TrivialReporter { padding: 8px 13px; clear: both; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ } +#TrivialReporter a:visited, #TrivialReporter a { color: #303; } +#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; } +#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; } +#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; } +#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; } +#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; } +#TrivialReporter .runner.running { background-color: yellow; } +#TrivialReporter .options { text-align: right; font-size: .8em; } +#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; } +#TrivialReporter .suite .suite { margin: 5px; } +#TrivialReporter .suite.passed { background-color: #dfd; } +#TrivialReporter .suite.failed { background-color: #fdd; } +#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; } +#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; } +#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; } +#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; } +#TrivialReporter .spec.skipped { background-color: #bbb; } +#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; } +#TrivialReporter .passed { background-color: #cfc; display: none; } +#TrivialReporter .failed { background-color: #fbb; } +#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; } +#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; } +#TrivialReporter .resultMessage .mismatch { color: black; } +#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; } +#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; } +#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; } +#TrivialReporter #jasmine_content { position: fixed; right: 100%; } +#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; } diff --git a/assets/javascripts/vendor/ember-data.js b/assets/javascripts/vendor/ember-data.js index f75f0bb7..640d8444 100644 --- a/assets/javascripts/vendor/ember-data.js +++ b/assets/javascripts/vendor/ember-data.js @@ -1284,6 +1284,8 @@ DS.Store = Ember.Object.extend({ return clientIdToId[clientId]; }); + if (!neededIds.length) { return; } + var adapter = get(this, '_adapter'); if (adapter && adapter.findMany) { adapter.findMany(this, type, neededIds); } else { throw fmt("Adapter is either null or does not implement `findMany` method", this); } @@ -2204,7 +2206,7 @@ var DirtyState = DS.State.extend({ t.recordBecameClean(dirtyType, record); }); - manager.goToState('loaded'); + manager.goToState('saved'); } }, Uncommitted), @@ -2234,7 +2236,7 @@ var DirtyState = DS.State.extend({ t.recordBecameClean('inflight', record); }); - manager.goToState('loaded'); + manager.goToState('saved'); manager.send('invokeLifecycleCallbacks', dirtyType); }, @@ -3212,6 +3214,17 @@ DS.Model.reopenClass({ } }); +function getAttr(record, options, key) { + var data = get(record, 'data'); + var value = get(data, key); + + if (value === undefined) { + value = options.defaultValue; + } + + return value; +} + DS.attr = function(type, options) { var transform = DS.attr.transforms[type]; Ember.assert("Could not find model attribute of type " + type, !!transform); @@ -3241,14 +3254,12 @@ DS.attr = function(type, options) { if (arguments.length === 2) { value = transformTo(value); - this.setProperty(key, value); - } else { - data = get(this, 'data'); - value = get(data, key); - if (value === undefined) { - value = options.defaultValue; + if (value !== getAttr(this, options, key)) { + this.setProperty(key, value); } + } else { + value = getAttr(this, options, key); } return transformFrom(value); diff --git a/assets/javascripts/vendor/ember.js b/assets/javascripts/vendor/ember.js index a746fd5e..e00ef8fb 100644 --- a/assets/javascripts/vendor/ember.js +++ b/assets/javascripts/vendor/ember.js @@ -944,7 +944,7 @@ Ember.isArray = function(obj) { Ember.makeArray(); => [] Ember.makeArray(null); => [] Ember.makeArray(undefined); => [] - Ember.makeArray('lindsay'); => ['lindsay'] + Ember.makeArray('lindsay'); => ['lindsay'] Ember.makeArray([1,2,42]); => [1,2,42] var controller = Ember.ArrayProxy.create({ content: [] }); @@ -3646,7 +3646,7 @@ Ember.RunLoop = RunLoop; call. Ember.run(function(){ - // code to be execute within a RunLoop + // code to be execute within a RunLoop }); @name run @@ -3684,7 +3684,7 @@ var run = Ember.run; an lower-level way to use a RunLoop instead of using Ember.run(). Ember.run.begin(); - // code to be execute within a RunLoop + // code to be execute within a RunLoop Ember.run.end(); @@ -3700,7 +3700,7 @@ Ember.run.begin = function() { instead of using Ember.run(). Ember.run.begin(); - // code to be execute within a RunLoop + // code to be execute within a RunLoop Ember.run.end(); @returns {void} @@ -5448,7 +5448,7 @@ Ember.inspect = function(obj) { /** Compares two objects, returning true if they are logically equal. This is a deeper comparison than a simple triple equal. For sets it will compare the - internal objects. For any other object that implements `isEqual()` it will + internal objects. For any other object that implements `isEqual()` it will respect that method. Ember.isEqual('hello', 'hello'); => true @@ -5630,7 +5630,7 @@ Ember.String = { > beta > gamma - @param {String} str + @param {String} str The string to split @returns {String} split string @@ -5639,7 +5639,7 @@ Ember.String = { /** Converts a camelized string into all lower case separated by underscores. - + 'innerHTML'.decamelize() => 'inner_html' 'action_name'.decamelize() => 'action_name' 'css-class-name'.decamelize() => 'css-class-name' @@ -5656,7 +5656,7 @@ Ember.String = { /** Replaces underscores or spaces with dashes. - + 'innerHTML'.dasherize() => 'inner-html' 'action_name'.dasherize() => 'action-name' 'css-class-name'.dasherize() => 'css-class-name' @@ -5823,7 +5823,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `property` extension of Javascript's Function prototype is available - when Ember.EXTEND_PROTOTYPES is true, which is the default. + when Ember.EXTEND_PROTOTYPES is true, which is the default. Computed properties allow you to treat a function like a property: @@ -5878,7 +5878,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `observes` extension of Javascript's Function prototype is available - when Ember.EXTEND_PROTOTYPES is true, which is the default. + when Ember.EXTEND_PROTOTYPES is true, which is the default. You can observe property changes simply by adding the `observes` call to the end of your method declarations in classes that you write. @@ -5889,7 +5889,7 @@ if (Ember.EXTEND_PROTOTYPES) { // Executes whenever the "value" property changes }.observes('value') }); - + @see Ember.Observable */ Function.prototype.observes = function() { @@ -5899,7 +5899,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `observesBefore` extension of Javascript's Function prototype is - available when Ember.EXTEND_PROTOTYPES is true, which is the default. + available when Ember.EXTEND_PROTOTYPES is true, which is the default. You can get notified when a property changes is about to happen by by adding the `observesBefore` call to the end of your method @@ -5910,7 +5910,7 @@ if (Ember.EXTEND_PROTOTYPES) { // Executes whenever the "value" property is about to change }.observesBefore('value') }); - + @see Ember.Observable */ Function.prototype.observesBefore = function() { @@ -6509,9 +6509,9 @@ Ember.Enumerable = Ember.Mixin.create( /** Returns a copy of the array with all null elements removed. - + var arr = ["a", null, "c", null]; - arr.compact(); => ["a", "c"] + arr.compact(); => ["a", "c"] @returns {Array} the array without null elements. */ @@ -7514,7 +7514,7 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable, colors.clear(); => [] colors.length(); => 0 - @returns {Ember.Array} An empty Array. + @returns {Ember.Array} An empty Array. */ clear: function () { var len = get(this, 'length'); @@ -7708,15 +7708,15 @@ var get = Ember.get, set = Ember.set; @class ## Overview - + This mixin provides properties and property observing functionality, core features of the Ember object model. - + Properties and observers allow one object to observe changes to a property on another object. This is one of the fundamental ways that models, controllers and views communicate with each other in an Ember application. - + Any object that has this mixin applied can be used in observer operations. That includes Ember.Object and most objects you will interact with as you write your Ember application. @@ -7724,16 +7724,16 @@ var get = Ember.get, set = Ember.set; Note that you will not generally apply this mixin to classes yourself, but you will use the features provided by this module frequently, so it is important to understand how to use it. - + ## Using get() and set() - + Because of Ember's support for bindings and observers, you will always access properties using the get method, and set properties using the set method. This allows the observing objects to be notified and computed properties to be handled properly. - + More documentation about `get` and `set` are below. - + ## Observing Property Changes You typically observe property changes simply by adding the `observes` @@ -7745,7 +7745,7 @@ var get = Ember.get, set = Ember.set; // Executes whenever the "value" property changes }.observes('value') }); - + Although this is the most common way to add an observer, this capability is actually built into the Ember.Object class on top of two methods defined in this mixin: `addObserver` and `removeObserver`. You can use @@ -7758,12 +7758,12 @@ var get = Ember.get, set = Ember.set; This will call the `targetAction` method on the `targetObject` to be called whenever the value of the `propertyKey` changes. - - Note that if `propertyKey` is a computed property, the observer will be - called when any of the property dependencies are changed, even if the + + Note that if `propertyKey` is a computed property, the observer will be + called when any of the property dependencies are changed, even if the resulting value of the computed property is unchanged. This is necessary because computed properties are not computed until `get` is called. - + @extends Ember.Mixin */ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { @@ -7777,7 +7777,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method is usually similar to using object[keyName] or object.keyName, however it supports both computed properties and the unknownProperty handler. - + Because `get` unifies the syntax for accessing all these kinds of properties, it can make many refactorings easier, such as replacing a simple property with a computed property, or vice versa. @@ -7973,11 +7973,11 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { Ember.propertyDidChange(this, keyName); return this; }, - + /** Convenience method to call `propertyWillChange` and `propertyDidChange` in succession. - + @param {String} keyName The property key to be notified about. @returns {Ember.Observable} */ @@ -8069,7 +8069,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method will be called when a client attempts to get the value of a property that has not been defined in one of the typical ways. Override this method to create "virtual" properties. - + @param {String} key The name of the unknown property that was requested. @returns {Object} The property value or undefined. Default is undefined. */ @@ -8081,7 +8081,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method will be called when a client attempts to set the value of a property that has not been defined in one of the typical ways. Override this method to create "virtual" properties. - + @param {String} key The name of the unknown property to be set. @param {Object} value The value the unknown property is to be set to. */ @@ -8092,7 +8092,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** This is like `get`, but allows you to pass in a dot-separated property path. - + person.getPath('address.zip'); // return the zip person.getPath('children.firstObject.age'); // return the first kid's age @@ -8108,7 +8108,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** This is like `set`, but allows you to specify the property you want to set as a dot-separated property path. - + person.setPath('address.zip', 10011); // set the zip to 10011 person.setPath('children.firstObject.age', 6); // set the first kid's age to 6 @@ -8126,9 +8126,9 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Retrieves the value of a property, or a default value in the case that the property returns undefined. - + person.getWithDefault('lastName', 'Doe'); - + @param {String} keyName The name of the property to retrieve @param {Object} defaultValue The value to return if the property value is undefined @returns {Object} The property value or the defaultValue. @@ -8139,10 +8139,10 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Set the value of a property to the current value plus some amount. - + person.incrementProperty('age'); team.incrementProperty('score', 2); - + @param {String} keyName The name of the property to increment @param {Object} increment The amount to increment by. Defaults to 1 @returns {Object} The new property value @@ -8152,13 +8152,13 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { set(this, keyName, (get(this, keyName) || 0)+increment); return get(this, keyName); }, - + /** Set the value of a property to the current value minus some amount. - + player.decrementProperty('lives'); orc.decrementProperty('health', 5); - + @param {String} keyName The name of the property to decrement @param {Object} increment The amount to decrement by. Defaults to 1 @returns {Object} The new property value @@ -8172,9 +8172,9 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Set the value of a boolean property to the opposite of it's current value. - + starship.toggleProperty('warpDriveEnaged'); - + @param {String} keyName The name of the property to toggle @returns {Object} The new property value */ @@ -11524,6 +11524,8 @@ Ember.ControllerMixin.reopen({ if (controller && context) { controller.set('content', context); } view = viewClass.create(); if (controller) { set(view, 'controller', controller); } + + /* console.log(view, view.toString()) */ set(this, outletName, view); return view; @@ -11603,7 +11605,7 @@ var invokeForState = { `Ember.View` is the class in Ember responsible for encapsulating templates of HTML content, combining templates with data to render as sections of a page's DOM, and registering and responding to user-initiated events. - + ## HTML Tag The default HTML tag name used for a view's DOM representation is `div`. This can be customized by setting the `tagName` property. The following view class: @@ -11629,7 +11631,7 @@ var invokeForState = {
          `class` attribute values can also be set by providing a `classNameBindings` property - set to an array of properties names for the view. The return value of these properties + set to an array of properties names for the view. The return value of these properties will be added as part of the value for the view's `class` attribute. These properties can be computed properties: @@ -11658,7 +11660,7 @@ var invokeForState = {
          - When using boolean class name bindings you can supply a string value other than the + When using boolean class name bindings you can supply a string value other than the property name for use as the `class` HTML attribute by appending the preferred value after a ":" character when defining the binding: @@ -11699,11 +11701,11 @@ var invokeForState = {
          - Updates to the the value of a class name binding will result in automatic update + Updates to the the value of a class name binding will result in automatic update of the HTML `class` attribute in the view's rendered HTML representation. If the value becomes `false` or `undefined` the class name will be removed. - Both `classNames` and `classNameBindings` are concatenated properties. + Both `classNames` and `classNameBindings` are concatenated properties. See `Ember.Object` documentation for more information about concatenated properties. ## HTML Attributes @@ -11749,7 +11751,7 @@ var invokeForState = { }.property() }) - Updates to the the property of an attribute binding will result in automatic update + Updates to the the property of an attribute binding will result in automatic update of the HTML attribute in the view's rendered HTML representation. `attributeBindings` is a concatenated property. See `Ember.Object` documentation @@ -11840,7 +11842,7 @@ var invokeForState = { primary templates, layouts can be any function that accepts an optional context parameter and returns a string of HTML that will be inserted inside view's tag. Views whose HTML element is self closing (e.g. ``) cannot have a layout and this property will be ignored. - + Most typically in Ember a layout will be a compiled Ember.Handlebars template. A view's layout can be set directly with the `layout` property or reference an @@ -11865,7 +11867,7 @@ var invokeForState = { See `Handlebars.helpers.yield` for more information. ## Responding to Browser Events - Views can respond to user-initiated events in one of three ways: method implementation, + Views can respond to user-initiated events in one of three ways: method implementation, through an event manager, and through `{{action}}` helper use in their template or layout. ### Method Implementation @@ -11882,8 +11884,8 @@ var invokeForState = { ### Event Managers Views can define an object as their `eventManager` property. This object can then implement methods that match the desired event names. Matching events that occur - on the view's rendered HTML or the rendered HTML of any of its DOM descendants - will trigger this method. A `jQuery.Event` object will be passed as the first + on the view's rendered HTML or the rendered HTML of any of its DOM descendants + will trigger this method. A `jQuery.Event` object will be passed as the first argument to the method and an `Ember.View` object as the second. The `Ember.View` will be the view whose rendered HTML was interacted with. This may be the view with the `eventManager` property or one of its descendent views. @@ -11917,7 +11919,7 @@ var invokeForState = { Similarly a view's event manager will take precedence for events of any views rendered as a descendent. A method name that matches an event name will not be called - if the view instance was rendered inside the HTML representation of a view that has + if the view instance was rendered inside the HTML representation of a view that has an `eventManager` property defined that handles events of the name. Events not handled by the event manager will still trigger method calls on the descendent. @@ -11939,7 +11941,7 @@ var invokeForState = { // eventManager doesn't handle click events }, mouseEnter: function(event){ - // will never be called if rendered inside + // will never be called if rendered inside // an OuterView. } }) @@ -11960,7 +11962,7 @@ var invokeForState = { Form events: 'submit', 'change', 'focusIn', 'focusOut', 'input' HTML5 drag and drop events: 'dragStart', 'drag', 'dragEnter', 'dragLeave', 'drop', 'dragEnd' - + ## Handlebars `{{view}}` Helper Other `Ember.View` instances can be included as part of a view's template by using the `{{view}}` Handlebars helper. See `Handlebars.helpers.view` for additional information. @@ -14338,7 +14340,7 @@ var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt; @class `Ember.CollectionView` is an `Ember.View` descendent responsible for managing a - collection (an array or array-like object) by maintaing a child view object and + collection (an array or array-like object) by maintaing a child view object and associated DOM representation for each item in the array and ensuring that child views and their associated rendered HTML are updated when items in the array are added, removed, or replaced. @@ -14382,7 +14384,7 @@ var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt; ## Automatic matching of parent/child tagNames - Setting the `tagName` property of a `CollectionView` to any of + Setting the `tagName` property of a `CollectionView` to any of "ul", "ol", "table", "thead", "tbody", "tfoot", "tr", or "select" will result in the item views receiving an appropriately matched `tagName` property. @@ -15229,15 +15231,15 @@ var arrayForEach = Ember.ArrayPolyfills.forEach; robotManager.getPath('currentState.name') // 'rampaging' Transition actions can also be created using the `transitionTo` method of the Ember.State class. The - following example StateManagers are equivalent: - + following example StateManagers are equivalent: + aManager = Ember.StateManager.create({ stateOne: Ember.State.create({ changeToStateTwo: Ember.State.transitionTo('stateTwo') }), stateTwo: Ember.State.create({}) }) - + bManager = Ember.StateManager.create({ stateOne: Ember.State.create({ changeToStateTwo: function(manager, context){ @@ -15318,7 +15320,7 @@ Ember.StateManager = Ember.State.extend( @default true */ errorOnUnhandledEvent: true, - + send: function(event, context) { Ember.assert('Cannot send event "' + event + '" while currentState is ' + get(this, 'currentState'), get(this, 'currentState')); if (arguments.length === 1) { context = {}; } @@ -18396,7 +18398,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ Will result in HTML structure: - @@ -18418,7 +18420,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ }) aView.appendTo('body') - + Will result in HTML structure:
          @@ -18492,7 +18494,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ Will result in the following HTML:
          -
          +
          hi
          @@ -18652,7 +18654,7 @@ var get = Ember.get, getPath = Ember.Handlebars.getPath, fmt = Ember.String.fmt;

          Howdy Mary

          Howdy Sara

          - + @name Handlebars.helpers.collection @param {String} path @param {Hash} options @@ -19266,7 +19268,7 @@ var set = Ember.set, get = Ember.get; /** @class - Creates an HTML input of type 'checkbox' with HTML related properties + Creates an HTML input of type 'checkbox' with HTML related properties applied directly to the input. {{view Ember.Checkbox classNames="applicaton-specific-checkbox"}} @@ -19285,7 +19287,7 @@ var set = Ember.set, get = Ember.get; through the Ember object or by interacting with its rendered element representation via the mouse, keyboard, or touch. Updating the value of the checkbox via jQuery will result in the checked value of the object and its element losing synchronization. - + ## Layout and LayoutName properties Because HTML `input` elements are self closing `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. @@ -19397,7 +19399,7 @@ var get = Ember.get, set = Ember.set; ## Layout and LayoutName properties Because HTML `input` elements are self closing `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. - + @extends Ember.TextSupport */ Ember.TextField = Ember.View.extend(Ember.TextSupport, @@ -19574,7 +19576,7 @@ var get = Ember.get, set = Ember.set; ## Layout and LayoutName properties - Because HTML `textarea` elements do not contain inner HTML the `layout` and `layoutName` + Because HTML `textarea` elements do not contain inner HTML the `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. @extends Ember.TextSupport diff --git a/assets/javascripts/vendor/facebox.js b/assets/javascripts/vendor/facebox.js new file mode 100644 index 00000000..a36acb0f --- /dev/null +++ b/assets/javascripts/vendor/facebox.js @@ -0,0 +1,310 @@ +/* + * Facebox (for jQuery) + * version: 1.2 (05/05/2008) + * @requires jQuery v1.2 or later + * + * Examples at http://famspam.com/facebox/ + * + * Licensed under the MIT: + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ] + * + * Usage: + * + * jQuery(document).ready(function() { + * jQuery('a[rel*=facebox]').facebox() + * }) + * + * Terms + * Loads the #terms div in the box + * + * Terms + * Loads the terms.html page in the box + * + * Terms + * Loads the terms.png image in the box + * + * + * You can also use it programmatically: + * + * jQuery.facebox('some html') + * jQuery.facebox('some html', 'my-groovy-style') + * + * The above will open a facebox with "some html" as the content. + * + * jQuery.facebox(function($) { + * $.get('blah.html', function(data) { $.facebox(data) }) + * }) + * + * The above will show a loading screen before the passed function is called, + * allowing for a better ajaxy experience. + * + * The facebox function can also display an ajax page, an image, or the contents of a div: + * + * jQuery.facebox({ ajax: 'remote.html' }) + * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style') + * jQuery.facebox({ image: 'stairs.jpg' }) + * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style') + * jQuery.facebox({ div: '#box' }) + * jQuery.facebox({ div: '#box' }, 'my-groovy-style') + * + * Want to close the facebox? Trigger the 'close.facebox' document event: + * + * jQuery(document).trigger('close.facebox') + * + * Facebox also has a bunch of other hooks: + * + * loading.facebox + * beforeReveal.facebox + * reveal.facebox (aliased as 'afterReveal.facebox') + * init.facebox + * afterClose.facebox + * + * Simply bind a function to any of these hooks: + * + * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... }) + * + */ +(function($) { + $.facebox = function(data, klass) { + $.facebox.loading() + + if (data.ajax) fillFaceboxFromAjax(data.ajax, klass) + else if (data.image) fillFaceboxFromImage(data.image, klass) + else if (data.div) fillFaceboxFromHref(data.div, klass) + else if ($.isFunction(data)) data.call($) + else $.facebox.reveal(data, klass) + } + + /* + * Public, $.facebox methods + */ + + $.extend($.facebox, { + settings: { + opacity : 0.2, + overlay : true, + loadingImage : '/facebox/loading.gif', + closeImage : '/facebox/closelabel.png', + imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ], + faceboxHtml : '\ + ' + }, + + loading: function() { + init() + if ($('#facebox .loading').length == 1) return true + showOverlay() + + $('#facebox .content').empty() + $('#facebox .body').children().hide().end(). + append('
          ') + + $('#facebox').css({ + top: getPageScroll()[1] + (getPageHeight() / 10), + left: $(window).width() / 2 - 205 + }).show() + + $(document).bind('keydown.facebox', function(e) { + if (e.keyCode == 27) $.facebox.close() + return true + }) + $(document).trigger('loading.facebox') + }, + + reveal: function(data, klass) { + $(document).trigger('beforeReveal.facebox') + if (klass) $('#facebox .content').addClass(klass) + $('#facebox .content').append(data) + $('#facebox .loading').remove() + $('#facebox .body').children().fadeIn('normal') + $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').width() / 2)) + $(document).trigger('reveal.facebox').trigger('afterReveal.facebox') + }, + + close: function() { + $(document).trigger('close.facebox') + return false + } + }) + + /* + * Public, $.fn methods + */ + + $.fn.facebox = function(settings) { + if ($(this).length == 0) return + + init(settings) + + function clickHandler() { + $.facebox.loading(true) + + // support for rel="facebox.inline_popup" syntax, to add a class + // also supports deprecated "facebox[.inline_popup]" syntax + var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) + if (klass) klass = klass[1] + + fillFaceboxFromHref(this.href, klass) + return false + } + + return this.bind('click.facebox', clickHandler) + } + + /* + * Private methods + */ + + // called one time to setup facebox on this page + function init(settings) { + if ($.facebox.settings.inited) return true + else $.facebox.settings.inited = true + + $(document).trigger('init.facebox') + makeCompatible() + + var imageTypes = $.facebox.settings.imageTypes.join('|') + $.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i') + + if (settings) $.extend($.facebox.settings, settings) + $('body').append($.facebox.settings.faceboxHtml) + + var preload = [ new Image(), new Image() ] + preload[0].src = $.facebox.settings.closeImage + preload[1].src = $.facebox.settings.loadingImage + + $('#facebox').find('.b:first, .bl').each(function() { + preload.push(new Image()) + preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1') + }) + + $('#facebox .close').click($.facebox.close) + $('#facebox .close_image').attr('src', $.facebox.settings.closeImage) + } + + // getPageScroll() by quirksmode.com + function getPageScroll() { + var xScroll, yScroll; + if (self.pageYOffset) { + yScroll = self.pageYOffset; + xScroll = self.pageXOffset; + } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict + yScroll = document.documentElement.scrollTop; + xScroll = document.documentElement.scrollLeft; + } else if (document.body) {// all other Explorers + yScroll = document.body.scrollTop; + xScroll = document.body.scrollLeft; + } + return new Array(xScroll,yScroll) + } + + // Adapted from getPageSize() by quirksmode.com + function getPageHeight() { + var windowHeight + if (self.innerHeight) { // all except Explorer + windowHeight = self.innerHeight; + } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode + windowHeight = document.documentElement.clientHeight; + } else if (document.body) { // other Explorers + windowHeight = document.body.clientHeight; + } + return windowHeight + } + + // Backwards compatibility + function makeCompatible() { + var $s = $.facebox.settings + + $s.loadingImage = $s.loading_image || $s.loadingImage + $s.closeImage = $s.close_image || $s.closeImage + $s.imageTypes = $s.image_types || $s.imageTypes + $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml + } + + // Figures out what you want to display and displays it + // formats are: + // div: #id + // image: blah.extension + // ajax: anything else + function fillFaceboxFromHref(href, klass) { + // div + if (href.match(/#/)) { + var url = window.location.href.split('#')[0] + var target = href.replace(url,'') + if (target == '#') return + $.facebox.reveal($(target).html(), klass) + + // image + } else if (href.match($.facebox.settings.imageTypesRegexp)) { + fillFaceboxFromImage(href, klass) + // ajax + } else { + fillFaceboxFromAjax(href, klass) + } + } + + function fillFaceboxFromImage(href, klass) { + var image = new Image() + image.onload = function() { + $.facebox.reveal('
          ', klass) + } + image.src = href + } + + function fillFaceboxFromAjax(href, klass) { + $.get(href, function(data) { $.facebox.reveal(data, klass) }) + } + + function skipOverlay() { + return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null + } + + function showOverlay() { + if (skipOverlay()) return + + if ($('#facebox_overlay').length == 0) + $("body").append('
          ') + + $('#facebox_overlay').hide().addClass("facebox_overlayBG") + .css('opacity', $.facebox.settings.opacity) + .click(function() { $(document).trigger('close.facebox') }) + .fadeIn(200) + return false + } + + function hideOverlay() { + if (skipOverlay()) return + + $('#facebox_overlay').fadeOut(200, function(){ + $("#facebox_overlay").removeClass("facebox_overlayBG") + $("#facebox_overlay").addClass("facebox_hide") + $("#facebox_overlay").remove() + }) + + return false + } + + /* + * Bindings + */ + + $(document).bind('close.facebox', function() { + $(document).unbind('keydown.facebox') + $('#facebox').fadeOut(function() { + $('#facebox .content').removeClass().addClass('content') + $('#facebox .loading').remove() + $(document).trigger('afterClose.facebox') + }) + hideOverlay() + }) + +})(jQuery); + diff --git a/assets/javascripts/vendor/sc-routes.js b/assets/javascripts/vendor/sc-routes.js new file mode 100644 index 00000000..f81d9dc4 --- /dev/null +++ b/assets/javascripts/vendor/sc-routes.js @@ -0,0 +1,546 @@ +// ========================================================================== +// Project: SproutCore - JavaScript Application Framework +// Copyright: ©2006-2011 Strobe Inc. and contributors. +// Portions ©2008-2011 Apple Inc. All rights reserved. +// License: Licensed under MIT license (see license.js) +// ========================================================================== + +var get = Ember.get, set = Ember.set; + +/** + Wether the browser supports HTML5 history. +*/ +var supportsHistory = !!(window.history && window.history.pushState); + +/** + Wether the browser supports the hashchange event. +*/ +var supportsHashChange = ('onhashchange' in window) && (document.documentMode === undefined || document.documentMode > 7); + +/** + @class + + Route is a class used internally by Ember.routes. The routes defined by your + application are stored in a tree structure, and this is the class for the + nodes. +*/ +var Route = Ember.Object.extend( +/** @scope Route.prototype */ { + + target: null, + + method: null, + + staticRoutes: null, + + dynamicRoutes: null, + + wildcardRoutes: null, + + add: function(parts, target, method) { + var part, nextRoute; + + // clone the parts array because we are going to alter it + parts = Ember.copy(parts); + + if (!parts || parts.length === 0) { + this.target = target; + this.method = method; + + } else { + part = parts.shift(); + + // there are 3 types of routes + switch (part.slice(0, 1)) { + + // 1. dynamic routes + case ':': + part = part.slice(1, part.length); + if (!this.dynamicRoutes) this.dynamicRoutes = {}; + if (!this.dynamicRoutes[part]) this.dynamicRoutes[part] = this.constructor.create(); + nextRoute = this.dynamicRoutes[part]; + break; + + // 2. wildcard routes + case '*': + part = part.slice(1, part.length); + if (!this.wildcardRoutes) this.wildcardRoutes = {}; + nextRoute = this.wildcardRoutes[part] = this.constructor.create(); + break; + + // 3. static routes + default: + if (!this.staticRoutes) this.staticRoutes = {}; + if (!this.staticRoutes[part]) this.staticRoutes[part] = this.constructor.create(); + nextRoute = this.staticRoutes[part]; + } + + // recursively add the rest of the route + if (nextRoute) nextRoute.add(parts, target, method); + } + }, + + routeForParts: function(parts, params) { + var part, key, route; + + // clone the parts array because we are going to alter it + parts = Ember.copy(parts); + + // if parts is empty, we are done + if (!parts || parts.length === 0) { + return this.method ? this : null; + + } else { + part = parts.shift(); + + // try to match a static route + if (this.staticRoutes && this.staticRoutes[part]) { + return this.staticRoutes[part].routeForParts(parts, params); + + } else { + + // else, try to match a dynamic route + for (key in this.dynamicRoutes) { + route = this.dynamicRoutes[key].routeForParts(parts, params); + if (route) { + params[key] = part; + return route; + } + } + + // else, try to match a wilcard route + for (key in this.wildcardRoutes) { + parts.unshift(part); + params[key] = parts.join('/'); + return this.wildcardRoutes[key].routeForParts(null, params); + } + + // if nothing was found, it means that there is no match + return null; + } + } + } + +}); + +/** + @class + + Ember.routes manages the browser location. You can change the hash part of the + current location. The following code + + Ember.routes.set('location', 'notes/edit/4'); + + will change the location to http://domain.tld/my_app#notes/edit/4. Adding + routes will register a handler that will be called whenever the location + changes and matches the route: + + Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route); + + You can pass additional parameters in the location hash that will be relayed + to the route handler: + + Ember.routes.set('location', 'notes/show/4?format=xml&language=fr'); + + The syntax for the location hash is described in the location property + documentation, and the syntax for adding handlers is described in the + add method documentation. + + Browsers keep track of the locations in their history, so when the user + presses the 'back' or 'forward' button, the location is changed, Ember.route + catches it and calls your handler. Except for Internet Explorer versions 7 + and earlier, which do not modify the history stack when the location hash + changes. + + Ember.routes also supports HTML5 history, which uses a '/' instead of a '#' + in the URLs, so that all your website's URLs are consistent. +*/ +var routes = Ember.routes = Ember.Object.create( + /** @scope Ember.routes.prototype */{ + + /** + Set this property to true if you want to use HTML5 history, if available on + the browser, instead of the location hash. + + HTML 5 history uses the history.pushState method and the window's popstate + event. + + By default it is false, so your URLs will look like: + + http://domain.tld/my_app#notes/edit/4 + + If set to true and the browser supports pushState(), your URLs will look + like: + + http://domain.tld/my_app/notes/edit/4 + + You will also need to make sure that baseURI is properly configured, as + well as your server so that your routes are properly pointing to your + SproutCore application. + + @see http://dev.w3.org/html5/spec/history.html#the-history-interface + @property + @type {Boolean} + */ + wantsHistory: false, + + /** + A read-only boolean indicating whether or not HTML5 history is used. Based + on the value of wantsHistory and the browser's support for pushState. + + @see wantsHistory + @property + @type {Boolean} + */ + usesHistory: null, + + /** + The base URI used to resolve routes (which are relative URLs). Only used + when usesHistory is equal to true. + + The build tools automatically configure this value if you have the + html5_history option activated in the Buildfile: + + config :my_app, :html5_history => true + + Alternatively, it uses by default the value of the href attribute of the + tag of the HTML document. For example: + + + + The value can also be customized before or during the exectution of the + main() method. + + @see http://www.w3.org/TR/html5/semantics.html#the-base-element + @property + @type {String} + */ + baseURI: document.baseURI, + + /** @private + A boolean value indicating whether or not the ping method has been called + to setup the Ember.routes. + + @property + @type {Boolean} + */ + _didSetup: false, + + /** @private + Internal representation of the current location hash. + + @property + @type {String} + */ + _location: null, + + /** @private + Routes are stored in a tree structure, this is the root node. + + @property + @type {Route} + */ + _firstRoute: null, + + /** @private + An internal reference to the Route class. + + @property + */ + _Route: Route, + + /** @private + Internal method used to extract and merge the parameters of a URL. + + @returns {Hash} + */ + _extractParametersAndRoute: function(obj) { + var params = {}, + route = obj.route || '', + separator, parts, i, len, crumbs, key; + + separator = (route.indexOf('?') < 0 && route.indexOf('&') >= 0) ? '&' : '?'; + parts = route.split(separator); + route = parts[0]; + if (parts.length === 1) { + parts = []; + } else if (parts.length === 2) { + parts = parts[1].split('&'); + } else if (parts.length > 2) { + parts.shift(); + } + + // extract the parameters from the route string + len = parts.length; + for (i = 0; i < len; ++i) { + crumbs = parts[i].split('='); + params[crumbs[0]] = crumbs[1]; + } + + // overlay any parameter passed in obj + for (key in obj) { + if (obj.hasOwnProperty(key) && key !== 'route') { + params[key] = '' + obj[key]; + } + } + + // build the route + parts = []; + for (key in params) { + parts.push([key, params[key]].join('=')); + } + params.params = separator + parts.join('&'); + params.route = route; + + return params; + }, + + /** + The current location hash. It is the part in the browser's location after + the '#' mark. + + The following code + + Ember.routes.set('location', 'notes/edit/4'); + + will change the location to http://domain.tld/my_app#notes/edit/4 and call + the correct route handler if it has been registered with the add method. + + You can also pass additional parameters. They will be relayed to the route + handler. For example, the following code + + Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route); + Ember.routes.set('location', 'notes/show/4?format=xml&language=fr'); + + will change the location to + http://domain.tld/my_app#notes/show/4?format=xml&language=fr and call the + MyApp.route method with the following argument: + + { route: 'notes/show/4', + params: '?format=xml&language=fr', + controller: 'notes', + action: 'show', + id: '4', + format: 'xml', + language: 'fr' } + + The location can also be set with a hash, the following code + + Ember.routes.set('location', + { route: 'notes/edit/4', format: 'xml', language: 'fr' }); + + will change the location to + http://domain.tld/my_app#notes/show/4?format=xml&language=fr. + + The 'notes/show/4&format=xml&language=fr' syntax for passing parameters, + using a '&' instead of a '?', as used in SproutCore 1.0 is still supported. + + @property + @type {String} + */ + location: function(key, value) { + this._skipRoute = false; + return this._extractLocation(key, value); + }.property(), + + _extractLocation: function(key, value) { + var crumbs, encodedValue; + + if (value !== undefined) { + if (value === null) { + value = ''; + } + + if (typeof(value) === 'object') { + crumbs = this._extractParametersAndRoute(value); + value = crumbs.route + crumbs.params; + } + + if (!Ember.empty(value) || (this._location && this._location !== value)) { + encodedValue = encodeURI(value); + + if (this.usesHistory) { + if (encodedValue.length > 0) { + encodedValue = '/' + encodedValue; + } + window.history.pushState(null, null, get(this, 'baseURI') + encodedValue); + } else { + window.location.hash = encodedValue; + } + } + + this._location = value; + } + + return this._location; + }, + + /** + You usually don't need to call this method. It is done automatically after + the application has been initialized. + + It registers for the hashchange event if available. If not, it creates a + timer that looks for location changes every 150ms. + */ + ping: function() { + var that; + + if (!this._didSetup) { + this._didSetup = true; + + if (get(this, 'wantsHistory') && supportsHistory) { + this.usesHistory = true; + + popState(); + jQuery(window).bind('popstate', popState); + + } else { + this.usesHistory = false; + + if (supportsHashChange) { + hashChange(); + jQuery(window).bind('hashchange', hashChange); + + } else { + // we don't use a Ember.Timer because we don't want + // a run loop to be triggered at each ping + that = this; + this._invokeHashChange = function() { + that.hashChange(); + setTimeout(that._invokeHashChange, 100); + }; + this._invokeHashChange(); + } + } + } + }, + + /** + Adds a route handler. Routes have the following format: + + - 'users/show/5' is a static route and only matches this exact string, + - ':action/:controller/:id' is a dynamic route and the handler will be + called with the 'action', 'controller' and 'id' parameters passed in a + hash, + - '*url' is a wildcard route, it matches the whole route and the handler + will be called with the 'url' parameter passed in a hash. + + Route types can be combined, the following are valid routes: + + - 'users/:action/:id' + - ':controller/show/:id' + - ':controller/ *url' (ignore the space, because of jslint) + + @param {String} route the route to be registered + @param {Object} target the object on which the method will be called, or + directly the function to be called to handle the route + @param {Function} method the method to be called on target to handle the + route, can be a function or a string + */ + add: function(route, target, method) { + if (!this._didSetup) { + Ember.run.once(this, 'ping'); + } + + if (method === undefined && Ember.typeOf(target) === 'function') { + method = target; + target = null; + } else if (Ember.typeOf(method) === 'string') { + method = target[method]; + } + + if (!this._firstRoute) this._firstRoute = Route.create(); + this._firstRoute.add(route.split('/'), target, method); + + return this; + }, + + /** + Observer of the 'location' property that calls the correct route handler + when the location changes. + */ + locationDidChange: function() { + this.trigger(); + }.observes('location'), + + /** + Triggers a route even if already in that route (does change the location, if it + is not already changed, as well). + + If the location is not the same as the supplied location, this simply lets "location" + handle it (which ends up coming back to here). + */ + trigger: function() { + var location = get(this, 'location'), + params, route; + + if (this._firstRoute) { + params = this._extractParametersAndRoute({ route: location }); + location = params.route; + delete params.route; + delete params.params; + + route = this.getRoute(location, params); + if (route && route.method) { + route.method.call(route.target || this, params); + } + } + }, + + getRoute: function(route, params) { + var firstRoute = this._firstRoute; + if (params == null) { + params = {} + } + + return firstRoute.routeForParts(route.split('/'), params); + }, + + exists: function(route, params) { + route = this.getRoute(route, params); + return route != null && route.method != null; + } + +}); + +/** + Event handler for the hashchange event. Called automatically by the browser + if it supports the hashchange event, or by our timer if not. +*/ +function hashChange(event) { + var loc = window.location.hash; + + // Remove the '#' prefix + loc = (loc && loc.length > 0) ? loc.slice(1, loc.length) : ''; + + if (!jQuery.browser.mozilla) { + // because of bug https://bugzilla.mozilla.org/show_bug.cgi?id=483304 + loc = decodeURI(loc); + } + + if (get(routes, 'location') !== loc && !routes._skipRoute) { + Ember.run.once(function() { + set(routes, 'location', loc); + }); + } + routes._skipRoute = false; +} + +function popState(event) { + var base = get(routes, 'baseURI'), + loc = document.location.href; + + if (loc.slice(0, base.length) === base) { + + // Remove the base prefix and the extra '/' + loc = loc.slice(base.length + 1, loc.length); + + if (get(routes, 'location') !== loc && !routes._skipRoute) { + Ember.run.once(function() { + set(routes, 'location', loc); + }); + } + } + routes._skipRoute = false; +} + diff --git a/assets/static/sponsors.json b/assets/static/sponsors.json new file mode 100644 index 00000000..1645c1d7 --- /dev/null +++ b/assets/static/sponsors.json @@ -0,0 +1,135 @@ +{ + "platinum": [ + { + "url": "http://www.wooga.com", + "image": "wooga-205x130.png" + }, + { + "url": "http://bendyworks.com", + "image": "bendyworks-205x130.png" + }, + { + "url": "http://cloudcontrol.com", + "image": "cloudcontrol-205x130.png" + }, + { + "url": "http://xing.de", + "image": "xing-205x130.png" + } + ], + "gold": [ + { + "url": "http://heroku.com", + "image": "heroku-205x60.png" + }, + { + "url": "http://soundcloud.com", + "image": "soundcloud-205x60.png" + }, + { + "url": "http://nedap.com", + "image": "nedap-205x60.png" + }, + { + "url": "http://mongohq.com", + "image": "mongohq-205x60.png" + }, + { + "url": "http://zweitag.de", + "image": "zweitag-205x60.png" + }, + { + "url": "http://kanbanery.com", + "image": "kanbanery-205x60.png" + }, + { + "url": "http://ticketevolution.com", + "image": "ticketevolution-205x60.jpg" + }, + { + "url": "http://plan.io/travis", + "image": "planio-205x60.png" + } + ], + "silver": [ + { + "link": "Cobot: The one tool to run your coworking space" + }, + { + "link": "JumpstartLab: We build developers" + }, + { + "link": "Evil Martians: Agile Ruby on Rails development" + }, + { + "link": "Zendesk: Love your helpdesk" + }, + { + "link": "Stripe: Payments for developers" + }, + { + "link": "Basho: We make Riak!" + }, + { + "link": "Relevance: We deliver software solutions" + }, + { + "link": "Mindmatters: Software für Menschen" + }, + { + "link": "Amen: The best and worst of everything" + }, + { + "link": "Site5: Premium Web Hosting Solutions" + }, + { + "link": "Crowd Interactive: Leading Rails consultancy in Mexico" + }, + { + "link": "Atomic Object: Work with really smart people" + }, + { + "link": "Codeminer: smart services for your startup" + }, + { + "link": "Cloudant: grow into your data layer, not out of it" + }, + { + "link": "Gidsy: Explore, organize & book unique things to do!" + }, + { + "link": "5apps: Package & deploy HTML5 apps automatically" + }, + { + "link": "Meltmedia: We are Interactive Superheroes" + }, + { + "link": "Fingertips offers design and development services" + }, + { + "link": "Engine Yard: Build epic apps, let us handle the rest" + }, + { + "link": "Malwarebytes: Defeat Malware once and for all." + }, + { + "link": "Readmill: The best reading app on the iPad." + }, + { + "link": "Medidata: clinical tech improving quality of life" + }, + { + "link": "ESM: Japan's best agile Ruby/Rails consultancy" + }, + { + "link": "Twitter: instantly connects people everywhere" + }, + { + "link": "AGiLE ANiMAL: we <3 Travis CI." + }, + { + "link": "Tupalo: Discover, review & share local businesses." + } + ] +} + diff --git a/assets/stylesheets/application.css b/assets/stylesheets/application.css deleted file mode 100644 index e71b45eb..00000000 --- a/assets/stylesheets/application.css +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This is a manifest file that'll be compiled into application.css, which will include all the files - * listed below. - * - * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, - * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. - * - * You're free to add application-wide styles to this file and they'll appear at the top of the - * compiled file, but it's generally better to create a new file per style scope. - * - *= require_self - *= require_tree . - */ - -body { - font-family: Helvetica; -} - -#head { - width: 100%; - height: 40px; - font-size: 20px; - font-weight: bold; -} - -#left, #main { - float: left; -} - -#left { - width: 200px; -} - -#main { - width: 800px; - padding-left: 1em; -} - -h2 { - margin-top: 0; -} - -ul { - margin: 0; - padding: 0; -} - -li { - list-style-type: none; -} - -.tabs li { - float: left; - margin-right: 20px; -} - -.tab { - clear: both; - padding-top: 20px; -} - -.github-stats { - float: right; - width: 100px; -} -.github-stats li { - float: left; - margin-left: 20px; -} - -.summary { - display: inline-block; -} -.summary .left, -.summary .right { - float: left; - width: 350px; -} - -dt { - clear: both; - float: left; - width: 60px; -} -dd { - float: left; -} - -/* .green { */ -/* border-top: 5px solid lightgreen; */ -/* } */ -/* .red { */ -/* border-top: 5px solid red; */ -/* } */ - -#jobs, -.log { - clear: both; - padding-top: 20px; -} -table { - clear: both; - margin-top: 20px; -} -caption { - text-align: left; - font-weight: bold; -} diff --git a/assets/stylesheets/application.sass b/assets/stylesheets/application.sass new file mode 100644 index 00000000..cc4f2407 --- /dev/null +++ b/assets/stylesheets/application.sass @@ -0,0 +1,111 @@ +html + margin: 0 + padding: 0 + +body + overflow-x: hidden + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif + line-height: 120% + margin: 0 + padding: 0 + width: 100% + +a + color: #333 + text-decoration: none + +ul + padding: 0 + margin: 0 + list-style-type: none + +li + padding: 0 + +td, th + text-align: left + font-size: 80% + padding: 5px 10px + vertical-align: top + +caption + text-align: left + font-size: 16px + font-weight: bold + color: #666 + +pre + background: none repeat scroll 0 0 #FAFAFA + border: 1px solid #DDDDDD + border-radius: 8px 8px 8px 8px + font-family: monospace + font-size: 13px + line-height: 1.5em + margin-top: 1em + overflow-x: scroll + padding: 1em 1.5em + +pre::-webkit-scrollbar + height: 10px + width: 10px + +pre::-webkit-scrollbar-button:start:decrement, +pre::-webkit-scrollbar-button:end:increment + display: none + +pre::-webkit-scrollbar-track-piece + background: #444 + -webkit-border-radius: 4px + +pre::-webkit-scrollbar-thumb:horizontal + background: -webkit-gradient(linear, left top, left bottom, from(#85888E), to(#55585E)) + -webkit-border-radius: 4px + width: 25px + +#flash-messages + position: absolute + left: 400px + top: 10px + font-size: 25px + color: #FFFFFF + +.display + display: block !important + +.emoji + vertical-align: middle + width: 20px + height: 20px + +.help + display: inline-block + height: 19px + width: 16px + margin: -9px 0 0 4px + vertical-align: middle + background: inline-image('icons/help.png') no-repeat scroll 0 3px transparent + cursor: pointer + +.context_help_caption + text-align: left + font-size: 16px + font-weight: bold + color: #666 + border-bottom: 1px solid #CCCCCC + +.context_help + display: none + +.context_help_body + font-size: 1em + line-height: 1.4286 + margin: 1.4286em 0 + +#facebox + .content + display: block !important + .close + display: none + pre::-webkit-scrollbar + height: 0 + width: 0 diff --git a/assets/stylesheets/left.sass b/assets/stylesheets/left.sass new file mode 100644 index 00000000..b443702e --- /dev/null +++ b/assets/stylesheets/left.sass @@ -0,0 +1,24 @@ +@import "compass" + +body#home + background: inline-image('ui/background-left.png') repeat-y -27px top + +#left + position: absolute + z-index: 10 + width: 400px + + #search_box + height: 90px + padding: 30px 20px 0 20px + background-color: #e5e8ee + + input[type=text] + height: 28px + width: 97% + padding: 0 0 0 10px + font-size: 10pt + color: #666 + border: 1px solid #ddd + @include border-radius(4px) + background: #fff inline-image('icons/search.png') no-repeat 335px 8px diff --git a/assets/stylesheets/left/repositories.sass b/assets/stylesheets/left/repositories.sass new file mode 100644 index 00000000..a76a65c9 --- /dev/null +++ b/assets/stylesheets/left/repositories.sass @@ -0,0 +1,57 @@ +@import "compass" + +#repositories li + position: relative + font-size: 16px + overflow: visible + padding: 15px 25px 15px 45px + border-bottom: 1px solid #ccc + background-position: 24px 16px + background-repeat: no-repeat + + &:nth-child(odd) + background-color: #fff + &:nth-child(even) + background-color: #f6f6f6 + + &.green a + color: green + &.red a + color: #c00 + + .last_build + float: right + + .summary + margin: 5px 0 0 0 + font-size: 13px + color: #666 + + .description + margin: 5px 0 0 0 + font-size: 13px + color: #666 + display: none + + .indicator + display: none + + &.selected .indicator + display: block + position: absolute + top: 0px + right: -17px + width: 17px + height: 100% + background: no-repeat center left + + &.loading + font-size: 13px + color: #999 + background-color: #fff + + p + display: inline-block + margin: 0 0 0 -10px + padding-right: 25px + background: inline-image('spinner.gif') no-repeat right 6px diff --git a/assets/stylesheets/main.sass b/assets/stylesheets/main.sass new file mode 100644 index 00000000..c9d88ee2 --- /dev/null +++ b/assets/stylesheets/main.sass @@ -0,0 +1,23 @@ +#main + position: relative + +#home + #main + min-height: 1000px + padding: 20px 270px 30px 430px + + &.loading + opacity: .1 + + &.maximized + padding: 60px 100px 30px 440px + +#stats, +#profile + #main + width: 600px + padding: 20px 0 0 0 + margin-left: auto + margin-right: auto + + diff --git a/assets/stylesheets/main/list.sass b/assets/stylesheets/main/list.sass new file mode 100644 index 00000000..7b37272c --- /dev/null +++ b/assets/stylesheets/main/list.sass @@ -0,0 +1,33 @@ +@import "compass" + +table.list + width: 100% + margin: 25px 0 0 0 + border-spacing: 0 + + caption + margin-left: 12px + margin-bottom: 8px + + tr + max-height: 20px + + th + font-size: 13px + color: #666 + white-space: nowrap + border-bottom: 2px solid white + + td + white-space: nowrap + border-bottom: 2px solid white + &.message + overflow: hidden + text-overflow: ellipsis + white-space: normal + + td:first-child + @include border-left-radius(4px) + + td:last-child + @include border-right-radius(4px) diff --git a/assets/stylesheets/main/log.sass b/assets/stylesheets/main/log.sass new file mode 100644 index 00000000..6bb830e2 --- /dev/null +++ b/assets/stylesheets/main/log.sass @@ -0,0 +1,87 @@ +@import "compass" + +#main + .sponsor + font-size: 13px + color: #999 + +#log + clear: left + white-space: pre-wrap + word-wrap: break-word + line-height: 140% + font-size: 90% + margin-top: 25px + padding: 15px 0 + color: white + background-color: #333 + @include border-radius(4px) + + // deansi styles, see javascripts/lib/deansi.js + p + position: relative + padding: 0 15px 0 50px + margin: 0 + min-height: 16px + &:hover + background-color: rgba(255, 255, 255, 0.05) + &.highlight + background-color: rgba(255, 255, 255, 0.5) + a + position: absolute + margin-left: -40px + cursor: pointer + + .fold + height: 16px + overflow: hidden + cursor: pointer + &.open + height: auto + + .bold + font-weight: bold + .italic + font-style: italic + .underscore + /* monochrome displays only according to http://ascii-table.com/ansi-escape-sequences.php + + .black + color: black + .red + color: red + .green + color: lime + .yellow + color: yellow + .blue + color: blue + .magenta + color: magenta + .cyan + color: cyan + .white + color: white + .black.bright + color: #999 + + .bg-black + background-color: black + .bg-red + background-color: red + .bg-green + background-color: lime + .bg-yellow + background-color: yellow + .bg-blue + background-color: blue + .bg-magenta + background-color: magenta + .bg-cyan + background-color: cyan + .bg-white + background-color: white + + + + diff --git a/assets/stylesheets/main/repository.sass b/assets/stylesheets/main/repository.sass new file mode 100644 index 00000000..7388ed97 --- /dev/null +++ b/assets/stylesheets/main/repository.sass @@ -0,0 +1,50 @@ +@import "compass" + +#repository + position: relative + + h3 + margin: 15px 60px 0 0 + a + font-size: 24px + line-height: 24px + + a + color: #666 + text-decoration: underline + + .description, .language + font-weight: normal + font-size: 13px + color: #999 + + .sync + font-weight: normal + font-size: 13px + color: #999 + float: left + padding-right: 25px + + .language + padding-right: 5px + + .github-stats + position: absolute + top: 0 + right: 0 + > * + float: left + a + height: 16px + display: block + font-size: 12px + font-weight: bold + text-decoration: none + margin-left: 10px + padding-left: 20px + background: no-repeat 0px 2px + color: #999 + &.watchers + background-image: inline-image('icons/github-watchers.png') + &.forks + background-image: inline-image('icons/github-forks.png') diff --git a/assets/stylesheets/main/summary.sass b/assets/stylesheets/main/summary.sass new file mode 100644 index 00000000..2639e26b --- /dev/null +++ b/assets/stylesheets/main/summary.sass @@ -0,0 +1,31 @@ +@import "compass" + +#summary + margin: 0 0 0 12px + color: #666 + font-size: 80% + @include clearfix + + .left, + .right + float: left + + dt, dd + float: left + min-height: 25px + margin: 0 + dt + clear: left + width: 90px + dd + width: 150px + > dd + width: 80% + min-width: 315px + overflow: hidden + text-overflow: ellipsis + white-space: nowrap + + .message + white-space: normal + min-width: 0 diff --git a/assets/stylesheets/main/tools.sass b/assets/stylesheets/main/tools.sass new file mode 100644 index 00000000..d67c5562 --- /dev/null +++ b/assets/stylesheets/main/tools.sass @@ -0,0 +1,40 @@ +@import "compass" + +#tools + position: relative + float: right + a + display: block + width: 39px + height: 21px + margin-top: -27px + background: inline-image('ui/tools-button.png') no-repeat + cursor: pointer + + .pane + display: none + position: absolute + z-index: 400 + top: -1px + right: 0 + width: 600px + padding: 10px 20px + border: 1px solid #CCC + background-color: #F2F4F9 + font-size: 80% + color: #666 + @include border-bottom-radius(4px) + @include single-box-shadow(rgba(black, 0.1), 1px, 3px, 5px) + + p + margin: 10px 0 + label + width: 80px + display: inline-block + input + border: 1px solid #DDD + width: 510px + padding: 4px + @include border-radius(3px) + + diff --git a/assets/stylesheets/profile.sass b/assets/stylesheets/profile.sass new file mode 100644 index 00000000..d1a28678 --- /dev/null +++ b/assets/stylesheets/profile.sass @@ -0,0 +1,47 @@ +@import "compass" + +#profile + a + text-decoration: underline + + img + float: left + margin: 3px 15px 0 0 + @include border-radius(4px) + + dl + margin: 0 0 20px 18px + color: #666 + font-size: 13px + + dt + display: block + float: left + width: 50px + + dd + clear: right + + #welcome + margin-top: -35px + margin-bottom: 35px + font-size: 13px + h4, p + margin-bottom: 4px + + p.notice + background-color: #a8eb75 + padding: 10px + @include border-radius(4px) + a + text-decoration: underline + small + font-size: 13px + display: block + + p.tip + font-size: 13px + margin-top: -10px + + .highlight + color: #C7371A diff --git a/assets/stylesheets/profile/hooks.sass b/assets/stylesheets/profile/hooks.sass new file mode 100644 index 00000000..7058410b --- /dev/null +++ b/assets/stylesheets/profile/hooks.sass @@ -0,0 +1,73 @@ +@import "compass" + +#hooks + // @include list-base + margin-top: 10px + + li + position: relative + height: 19px + padding: 10px + white-space: nowrap + overflow: hidden + border-bottom: 1px solid #DDD + + &:nth-child(3) + border-top: 1px solid #DDD + + &:nth-child(odd) + background-color: #FAFBFC + + &:nth-child(odd) .controls + background: #fafbfc + + > a + float: left + font-size: 16px + color: #666 + text-decoration: none + + .description + display: none + margin-left: 10px + font-size: 12px + white-space: nowrap + overflow: hidden + text-overflow: ellipsis + color: #999 + + .controls + position: absolute + top: 10px + right: 0 + white-space: nowrap + background: #fff + a + float: left + display: block + + .github-admin + // Overriding an earlier definition above, which is probably + // obsolete. TODO: Remove if so. + position: relative + height: 20px + width: 20px + padding-right: 0 + background: inline-image('icons/github-admin.png') no-repeat 3px 4px + + .switch + height: 20px + width: 80px + margin-left: 10px + background: inline-image('ui/off.png') no-repeat + cursor: pointer + &.active + background: inline-image('ui/on.png') no-repeat + + &:hover + > a + color: #c7371a + + .description + display: inline + diff --git a/assets/stylesheets/right.sass b/assets/stylesheets/right.sass new file mode 100644 index 00000000..9e39a461 --- /dev/null +++ b/assets/stylesheets/right.sass @@ -0,0 +1,48 @@ +@import "compass" + +#right + position: absolute + display: block + top: 0 + right: 0 + min-height: 100% + width: 205px + padding: 20px 20px 20px 10px + background-color: #f2f4f9 + border-bottom: 1px solid #ccc + font-size: 13px + // @include transition(width .1s ease-out) + + h4 + margin: 25px 0 0 0 + + ul + margin-top: 10px + + .box + margin-top: 25px + padding: 15px + border: 1px solid #ccc + background-color: #fff + @include border-radius(4px) + + h4 + margin: 0 + a + text-decoration: underline + li + list-style-type: square + margin-left: 15px + + #alpha_warning + background-color: #ffffda + + #alpha_warning h4 + padding-left: 20px + background: inline-image('icons/construction.png') no-repeat top left + + #alpha_warning p + margin-bottom: 0 + color: #666 + + diff --git a/assets/stylesheets/right/github.sass b/assets/stylesheets/right/github.sass new file mode 100644 index 00000000..24f75115 --- /dev/null +++ b/assets/stylesheets/right/github.sass @@ -0,0 +1,25 @@ +@import "compass" + +#github + display: block + position: absolute + top: 0 + right: -70px + width: 250px + padding: 3px 0 + border-top: 2px solid #ef9f4c + border-bottom: 2px solid #ef9f4c + background: #ef7600 + + color: white + text-align: center + text-decoration: none + font-size: 13px + font-weight: bold + line-height: 19px + letter-spacing: -1px + text-shadow: 0 0 10px #522600 + + @include rotate(45deg) + @include box-shadow(rgba(black, 0.5) 1px 1px 10px, rgba(black, 0.07) 0 0 3px 1px inset) + diff --git a/assets/stylesheets/right/lists.sass b/assets/stylesheets/right/lists.sass new file mode 100644 index 00000000..839a55e6 --- /dev/null +++ b/assets/stylesheets/right/lists.sass @@ -0,0 +1,42 @@ +#workers li, +#queues li + color: #666 + white-space: nowrap + overflow: hidden + margin: 0 + list-style-type: none + + h5 + font-size: 13px + font-weight: normal + margin: 0px + cursor: pointer + + ul + margin-top: 2px + margin-bottom: 5px + padding-left: 1px + display: none + + &.open ul + display: block + + .icon + clear: left + float: left + width: 8px + height: 8px + margin: 6px 6px 0 0 + -moz-border-radius: 8px + -webkit-border-radius: 8px + background: inline-image('icons/status.square.green.png') + + &.waiting .icon + background: inline-image('icons/status.square.green.png') + + &.errored .icon + background: inline-image('icons/status.square.red.png') + + &.stopped .icon + background: inline-image('icons/status.square.gray.png') + diff --git a/assets/stylesheets/right/slider.sass b/assets/stylesheets/right/slider.sass new file mode 100644 index 00000000..9e1ddc08 --- /dev/null +++ b/assets/stylesheets/right/slider.sass @@ -0,0 +1,55 @@ +$slider-border-normal: #f2f4f9 +$slider-border-light: #999 +$slider-border-hover: #e1e2e6 + +#slider + position: absolute + height: 100% + top: 0 + left: -10px + width: 10px + border-left: 1px solid #ccc + border-bottom: 1px solid #ccc + background-color: #f2f4f9 + cursor: pointer + + .icon + width: 0 + height: 0 + position: absolute + top: 15px + border-color: $slider-border-normal $slider-border-normal $slider-border-normal $slider-border-light + border-width: 5px 0 5px 5px + border-style: solid + margin-top: -5px + margin-left: 3px + + &:hover + background: $slider-border-hover + .icon + border-color: $slider-border-hover $slider-border-hover $slider-border-hover $slider-border-light + +#home.maximized + #top .profile + margin-right: 10px + + #main + padding-right: 40px + + #right + width: 0 + padding: 0 + *:not(#slider):not(.icon):not(.ember-view) + display: none + + #slider + left: -20px + width: 20px + z-index: 50 + .icon + border-color: $slider-border-normal $slider-border-light $slider-border-normal $slider-border-normal + border-width: 5px 5px 5px 0 + + &:hover + .icon + border-color: $slider-border-hover $slider-border-light $slider-border-hover $slider-border-hover diff --git a/assets/stylesheets/right/sponsors.sass b/assets/stylesheets/right/sponsors.sass new file mode 100644 index 00000000..9f863352 --- /dev/null +++ b/assets/stylesheets/right/sponsors.sass @@ -0,0 +1,57 @@ +@import "compass" + +#right + .sponsors + &.top + height: 140px + + li + overflow: hidden + width: 205px + margin: 0 0 8px 0 + border: 1px solid #ddd + @include border-radius(8px) + list-style-type: none + + a + overflow: hidden + + img + z-index: 200 + overflow: hidden + width: 205px + @include border-radius(8px) + + .platinum + height: 130px + img + height: 130px + + .gold + height: 60px + img + height: 60px + + .silver + h5 + margin: 0 + font-size: 13px + p + margin: 0 + + .box .sponsors + li + list-style-type: none + margin-left: 0 + padding-bottom: 12px + a + color: #575c7c + font-weight: bold + text-decoration: none + + .hint + margin: 0 0 0 2px + font-size: 10px + text-align: left + + diff --git a/assets/stylesheets/stats.sass b/assets/stylesheets/stats.sass new file mode 100644 index 00000000..b8ec36c5 --- /dev/null +++ b/assets/stylesheets/stats.sass @@ -0,0 +1,6 @@ +#repo_count_container, +#build_count_container + width: 100% + height: 300px + margin: 30px 0 + diff --git a/assets/stylesheets/status.sass b/assets/stylesheets/status.sass new file mode 100644 index 00000000..8808c68e --- /dev/null +++ b/assets/stylesheets/status.sass @@ -0,0 +1,53 @@ +@import "compass" + +#repositories li, +#summary .number a, +table.list .number a + background-image: inline-image('icons/status.yellow.png') + background-repeat: no-repeat + +#repositories li.green, +.green #summary .number a, +table.list .green .number a + background-image: inline-image('icons/status.green.png') + color: green + background-repeat: no-repeat + +#repositories li.red, +.red #summary .number a, +table.list .red .number a + background-image: inline-image('icons/status.red.png') + color: #c00 + background-repeat: no-repeat + +#summary .number a, +table.list .number a + padding-left: 20px + +table.list + tbody + tr.allow-failure + background-color: #BDBDBD + td + cursor: pointer + background-color: #fffffa + tr:hover td + background-color: #ffffe1 + + .green + td + background-color: #fafffa + &:hover td + background-color: #dcffdc + .number a + color: green + + .red + td + background-color: #fffafa + &:hover td + background-color: #ffdcdc + .number a + color: #C00 + + diff --git a/assets/stylesheets/tabs.sass b/assets/stylesheets/tabs.sass new file mode 100644 index 00000000..08f16c12 --- /dev/null +++ b/assets/stylesheets/tabs.sass @@ -0,0 +1,51 @@ +@import "compass" + +.tabs + height: 29px + border-bottom: 1px solid #ccc + + li + display: inline-block + height: 28px + margin-right: 10px + background-color: #f6f6f6 + border: 1px solid #ccc + white-space: nowrap + cursor: pointer + @include border-top-radius(4px) + + &:hover + background-color: white + + .active + background-color: #fff + border-bottom-color: #fff + + h5 + margin: 0 + + h5 a + display: block + padding: 0 10px + line-height: 30px + font-size: 13px + font-weight: normal + +#left + .tabs + margin-top: -29px + + li:first-child + margin-left: 20px + + #tab_search:not(.active) + display: none + +#main + .tabs + margin-top: 35px + a + text-decoration: none + + .tab + margin-top: 20px diff --git a/assets/stylesheets/top.sass b/assets/stylesheets/top.sass new file mode 100644 index 00000000..e9aaca0a --- /dev/null +++ b/assets/stylesheets/top.sass @@ -0,0 +1,78 @@ +@import "compass" + +#top + color: #ccc + width: 100% + line-height: 40px + font-size: 13px + @include background(linear-gradient(#444, #111)) + + h1 + float: left + width: 73px + height: 30px + margin: 4px 40px 0 22px + text-indent: -9999px + background: inline-image('ui/logo.png') no-repeat + + ul + list-style-type: none + + a + color: #ccc + text-decoration: none + +#navigation + li + display: inline-block + + &.active + background-color: black + a + color: white + + a + display: block + padding: 0 15px + &:hover + color: white + + .profile + position: relative + float: right + margin-right: 120px + + img + position: absolute + top: 7px + left: 12px + @include border-radius(3px) + + a + padding: 0 35px 0 45px + + ul + display: none + position: absolute + z-index: 300 + top: 40px + width: 100% + background-color: #444 + @include border-bottom-radius(6px) + @include single-box-shadow(rgba(black, 0.3), 2px, 2px, 10px) + + li + display: block + + li:last-child a:hover + @include border-bottom-radius(4px) + + a + display: block + padding: 5px 35px 5px 45px + line-height: 24px + white-space: nowrap + &:hover + background-color: #555 + + diff --git a/assets/stylesheets/vendor/facebox.css b/assets/stylesheets/vendor/facebox.css new file mode 100644 index 00000000..3e2257aa --- /dev/null +++ b/assets/stylesheets/vendor/facebox.css @@ -0,0 +1,81 @@ +#facebox { + position: absolute; + top: 0; + left: 0; + z-index: 100; + text-align: left; +} + + +#facebox .popup{ + position:relative; + border:3px solid rgba(0,0,0,0); + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; + -webkit-box-shadow:0 0 18px rgba(0,0,0,0.4); + -moz-box-shadow:0 0 18px rgba(0,0,0,0.4); + box-shadow:0 0 18px rgba(0,0,0,0.4); +} + +#facebox .content { + display:table; + width: 370px; + padding: 10px; + background: #fff; + -webkit-border-radius:4px; + -moz-border-radius:4px; + border-radius:4px; +} + +#facebox .content > p:first-child{ + margin-top:0; +} +#facebox .content > p:last-child{ + margin-bottom:0; +} + +#facebox .close{ + position:absolute; + top:5px; + right:5px; + padding:2px; + background:#fff; +} +#facebox .close img{ + opacity:0.3; +} +#facebox .close:hover img{ + opacity:1.0; +} + +#facebox .loading { + text-align: center; +} + +#facebox .image { + text-align: center; +} + +#facebox img { + border: 0; + margin: 0; +} + +#facebox_overlay { + position: fixed; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.facebox_hide { + z-index:-100; +} + +.facebox_overlayBG { + background-color: #000; + z-index: 99; +} + diff --git a/public/images/emoji/-1.png b/public/images/emoji/-1.png new file mode 100644 index 00000000..6f757ba8 Binary files /dev/null and b/public/images/emoji/-1.png differ diff --git a/public/images/emoji/0.png b/public/images/emoji/0.png new file mode 100644 index 00000000..65146943 Binary files /dev/null and b/public/images/emoji/0.png differ diff --git a/public/images/emoji/1.png b/public/images/emoji/1.png new file mode 100644 index 00000000..d9ee9e36 Binary files /dev/null and b/public/images/emoji/1.png differ diff --git a/public/images/emoji/109.png b/public/images/emoji/109.png new file mode 100644 index 00000000..9c3512f2 Binary files /dev/null and b/public/images/emoji/109.png differ diff --git a/public/images/emoji/2.png b/public/images/emoji/2.png new file mode 100644 index 00000000..670b9904 Binary files /dev/null and b/public/images/emoji/2.png differ diff --git a/public/images/emoji/3.png b/public/images/emoji/3.png new file mode 100644 index 00000000..4884ee22 Binary files /dev/null and b/public/images/emoji/3.png differ diff --git a/public/images/emoji/4.png b/public/images/emoji/4.png new file mode 100644 index 00000000..9023a2cf Binary files /dev/null and b/public/images/emoji/4.png differ diff --git a/public/images/emoji/5.png b/public/images/emoji/5.png new file mode 100644 index 00000000..0bd3dad8 Binary files /dev/null and b/public/images/emoji/5.png differ diff --git a/public/images/emoji/6.png b/public/images/emoji/6.png new file mode 100644 index 00000000..62012079 Binary files /dev/null and b/public/images/emoji/6.png differ diff --git a/public/images/emoji/7.png b/public/images/emoji/7.png new file mode 100644 index 00000000..f510edd6 Binary files /dev/null and b/public/images/emoji/7.png differ diff --git a/public/images/emoji/8.png b/public/images/emoji/8.png new file mode 100644 index 00000000..c9996021 Binary files /dev/null and b/public/images/emoji/8.png differ diff --git a/public/images/emoji/8ball.png b/public/images/emoji/8ball.png new file mode 100644 index 00000000..74db01b7 Binary files /dev/null and b/public/images/emoji/8ball.png differ diff --git a/public/images/emoji/9.png b/public/images/emoji/9.png new file mode 100644 index 00000000..a340a91a Binary files /dev/null and b/public/images/emoji/9.png differ diff --git a/public/images/emoji/a.png b/public/images/emoji/a.png new file mode 100644 index 00000000..989e3e4b Binary files /dev/null and b/public/images/emoji/a.png differ diff --git a/public/images/emoji/ab.png b/public/images/emoji/ab.png new file mode 100644 index 00000000..8ae786c1 Binary files /dev/null and b/public/images/emoji/ab.png differ diff --git a/public/images/emoji/airplane.png b/public/images/emoji/airplane.png new file mode 100644 index 00000000..a6adc588 Binary files /dev/null and b/public/images/emoji/airplane.png differ diff --git a/public/images/emoji/alien.png b/public/images/emoji/alien.png new file mode 100644 index 00000000..141e2fbf Binary files /dev/null and b/public/images/emoji/alien.png differ diff --git a/public/images/emoji/ambulance.png b/public/images/emoji/ambulance.png new file mode 100644 index 00000000..9fe869fc Binary files /dev/null and b/public/images/emoji/ambulance.png differ diff --git a/public/images/emoji/angel.png b/public/images/emoji/angel.png new file mode 100644 index 00000000..d57c86ab Binary files /dev/null and b/public/images/emoji/angel.png differ diff --git a/public/images/emoji/anger.png b/public/images/emoji/anger.png new file mode 100644 index 00000000..c9245ca7 Binary files /dev/null and b/public/images/emoji/anger.png differ diff --git a/public/images/emoji/angry.png b/public/images/emoji/angry.png new file mode 100644 index 00000000..3c8e8920 Binary files /dev/null and b/public/images/emoji/angry.png differ diff --git a/public/images/emoji/apple.png b/public/images/emoji/apple.png new file mode 100644 index 00000000..4137b45a Binary files /dev/null and b/public/images/emoji/apple.png differ diff --git a/public/images/emoji/aquarius.png b/public/images/emoji/aquarius.png new file mode 100644 index 00000000..49ce4316 Binary files /dev/null and b/public/images/emoji/aquarius.png differ diff --git a/public/images/emoji/aries.png b/public/images/emoji/aries.png new file mode 100644 index 00000000..05835de5 Binary files /dev/null and b/public/images/emoji/aries.png differ diff --git a/public/images/emoji/arrow_backward.png b/public/images/emoji/arrow_backward.png new file mode 100644 index 00000000..9ad1296e Binary files /dev/null and b/public/images/emoji/arrow_backward.png differ diff --git a/public/images/emoji/arrow_down.png b/public/images/emoji/arrow_down.png new file mode 100644 index 00000000..3f9258d8 Binary files /dev/null and b/public/images/emoji/arrow_down.png differ diff --git a/public/images/emoji/arrow_forward.png b/public/images/emoji/arrow_forward.png new file mode 100644 index 00000000..200a6447 Binary files /dev/null and b/public/images/emoji/arrow_forward.png differ diff --git a/public/images/emoji/arrow_left.png b/public/images/emoji/arrow_left.png new file mode 100644 index 00000000..59be8e30 Binary files /dev/null and b/public/images/emoji/arrow_left.png differ diff --git a/public/images/emoji/arrow_lower_left.png b/public/images/emoji/arrow_lower_left.png new file mode 100644 index 00000000..7cc33a31 Binary files /dev/null and b/public/images/emoji/arrow_lower_left.png differ diff --git a/public/images/emoji/arrow_lower_right.png b/public/images/emoji/arrow_lower_right.png new file mode 100644 index 00000000..67d1c281 Binary files /dev/null and b/public/images/emoji/arrow_lower_right.png differ diff --git a/public/images/emoji/arrow_right.png b/public/images/emoji/arrow_right.png new file mode 100644 index 00000000..99ae84e6 Binary files /dev/null and b/public/images/emoji/arrow_right.png differ diff --git a/public/images/emoji/arrow_up.png b/public/images/emoji/arrow_up.png new file mode 100644 index 00000000..fd80ace4 Binary files /dev/null and b/public/images/emoji/arrow_up.png differ diff --git a/public/images/emoji/arrow_upper_left.png b/public/images/emoji/arrow_upper_left.png new file mode 100644 index 00000000..52b9b39f Binary files /dev/null and b/public/images/emoji/arrow_upper_left.png differ diff --git a/public/images/emoji/arrow_upper_right.png b/public/images/emoji/arrow_upper_right.png new file mode 100644 index 00000000..e8370c8a Binary files /dev/null and b/public/images/emoji/arrow_upper_right.png differ diff --git a/public/images/emoji/art.png b/public/images/emoji/art.png new file mode 100644 index 00000000..109f664f Binary files /dev/null and b/public/images/emoji/art.png differ diff --git a/public/images/emoji/astonished.png b/public/images/emoji/astonished.png new file mode 100644 index 00000000..052dfdbf Binary files /dev/null and b/public/images/emoji/astonished.png differ diff --git a/public/images/emoji/atm.png b/public/images/emoji/atm.png new file mode 100644 index 00000000..357caf4d Binary files /dev/null and b/public/images/emoji/atm.png differ diff --git a/public/images/emoji/b.png b/public/images/emoji/b.png new file mode 100644 index 00000000..dab96329 Binary files /dev/null and b/public/images/emoji/b.png differ diff --git a/public/images/emoji/baby.png b/public/images/emoji/baby.png new file mode 100644 index 00000000..25b4d645 Binary files /dev/null and b/public/images/emoji/baby.png differ diff --git a/public/images/emoji/baby_chick.png b/public/images/emoji/baby_chick.png new file mode 100644 index 00000000..9551846a Binary files /dev/null and b/public/images/emoji/baby_chick.png differ diff --git a/public/images/emoji/baby_symbol.png b/public/images/emoji/baby_symbol.png new file mode 100644 index 00000000..149dabf2 Binary files /dev/null and b/public/images/emoji/baby_symbol.png differ diff --git a/public/images/emoji/balloon.png b/public/images/emoji/balloon.png new file mode 100644 index 00000000..9f0cbd76 Binary files /dev/null and b/public/images/emoji/balloon.png differ diff --git a/public/images/emoji/bamboo.png b/public/images/emoji/bamboo.png new file mode 100644 index 00000000..fe642bfc Binary files /dev/null and b/public/images/emoji/bamboo.png differ diff --git a/public/images/emoji/bank.png b/public/images/emoji/bank.png new file mode 100644 index 00000000..74402657 Binary files /dev/null and b/public/images/emoji/bank.png differ diff --git a/public/images/emoji/barber.png b/public/images/emoji/barber.png new file mode 100644 index 00000000..6081b417 Binary files /dev/null and b/public/images/emoji/barber.png differ diff --git a/public/images/emoji/baseball.png b/public/images/emoji/baseball.png new file mode 100644 index 00000000..39b29b37 Binary files /dev/null and b/public/images/emoji/baseball.png differ diff --git a/public/images/emoji/basketball.png b/public/images/emoji/basketball.png new file mode 100644 index 00000000..0c4f880b Binary files /dev/null and b/public/images/emoji/basketball.png differ diff --git a/public/images/emoji/bath.png b/public/images/emoji/bath.png new file mode 100644 index 00000000..9672442c Binary files /dev/null and b/public/images/emoji/bath.png differ diff --git a/public/images/emoji/bear.png b/public/images/emoji/bear.png new file mode 100644 index 00000000..d01c4ce3 Binary files /dev/null and b/public/images/emoji/bear.png differ diff --git a/public/images/emoji/beer.png b/public/images/emoji/beer.png new file mode 100644 index 00000000..da1e34ab Binary files /dev/null and b/public/images/emoji/beer.png differ diff --git a/public/images/emoji/beers.png b/public/images/emoji/beers.png new file mode 100644 index 00000000..c6e2d638 Binary files /dev/null and b/public/images/emoji/beers.png differ diff --git a/public/images/emoji/beginner.png b/public/images/emoji/beginner.png new file mode 100644 index 00000000..784a81e1 Binary files /dev/null and b/public/images/emoji/beginner.png differ diff --git a/public/images/emoji/bell.png b/public/images/emoji/bell.png new file mode 100644 index 00000000..df5d66ab Binary files /dev/null and b/public/images/emoji/bell.png differ diff --git a/public/images/emoji/bento.png b/public/images/emoji/bento.png new file mode 100644 index 00000000..a66a2f5f Binary files /dev/null and b/public/images/emoji/bento.png differ diff --git a/public/images/emoji/bike.png b/public/images/emoji/bike.png new file mode 100644 index 00000000..36bc09ba Binary files /dev/null and b/public/images/emoji/bike.png differ diff --git a/public/images/emoji/bikini.png b/public/images/emoji/bikini.png new file mode 100644 index 00000000..e62cf066 Binary files /dev/null and b/public/images/emoji/bikini.png differ diff --git a/public/images/emoji/bird.png b/public/images/emoji/bird.png new file mode 100644 index 00000000..88e5786a Binary files /dev/null and b/public/images/emoji/bird.png differ diff --git a/public/images/emoji/birthday.png b/public/images/emoji/birthday.png new file mode 100644 index 00000000..5b2c28c0 Binary files /dev/null and b/public/images/emoji/birthday.png differ diff --git a/public/images/emoji/black_square.png b/public/images/emoji/black_square.png new file mode 100644 index 00000000..dcd4ca95 Binary files /dev/null and b/public/images/emoji/black_square.png differ diff --git a/public/images/emoji/blue_car.png b/public/images/emoji/blue_car.png new file mode 100644 index 00000000..badd22ea Binary files /dev/null and b/public/images/emoji/blue_car.png differ diff --git a/public/images/emoji/blue_heart.png b/public/images/emoji/blue_heart.png new file mode 100644 index 00000000..a8105782 Binary files /dev/null and b/public/images/emoji/blue_heart.png differ diff --git a/public/images/emoji/blush.png b/public/images/emoji/blush.png new file mode 100644 index 00000000..0b2628e9 Binary files /dev/null and b/public/images/emoji/blush.png differ diff --git a/public/images/emoji/boar.png b/public/images/emoji/boar.png new file mode 100644 index 00000000..2bd9362f Binary files /dev/null and b/public/images/emoji/boar.png differ diff --git a/public/images/emoji/boat.png b/public/images/emoji/boat.png new file mode 100644 index 00000000..8084f0e5 Binary files /dev/null and b/public/images/emoji/boat.png differ diff --git a/public/images/emoji/bomb.png b/public/images/emoji/bomb.png new file mode 100644 index 00000000..322a3f1b Binary files /dev/null and b/public/images/emoji/bomb.png differ diff --git a/public/images/emoji/book.png b/public/images/emoji/book.png new file mode 100644 index 00000000..3fa6b7c2 Binary files /dev/null and b/public/images/emoji/book.png differ diff --git a/public/images/emoji/boot.png b/public/images/emoji/boot.png new file mode 100644 index 00000000..fd52cafa Binary files /dev/null and b/public/images/emoji/boot.png differ diff --git a/public/images/emoji/bouquet.png b/public/images/emoji/bouquet.png new file mode 100644 index 00000000..791bfe86 Binary files /dev/null and b/public/images/emoji/bouquet.png differ diff --git a/public/images/emoji/bow.png b/public/images/emoji/bow.png new file mode 100644 index 00000000..87c85122 Binary files /dev/null and b/public/images/emoji/bow.png differ diff --git a/public/images/emoji/bowtie.png b/public/images/emoji/bowtie.png new file mode 100644 index 00000000..86550b32 Binary files /dev/null and b/public/images/emoji/bowtie.png differ diff --git a/public/images/emoji/boy.png b/public/images/emoji/boy.png new file mode 100644 index 00000000..584bb395 Binary files /dev/null and b/public/images/emoji/boy.png differ diff --git a/public/images/emoji/bread.png b/public/images/emoji/bread.png new file mode 100644 index 00000000..934bb3c5 Binary files /dev/null and b/public/images/emoji/bread.png differ diff --git a/public/images/emoji/briefcase.png b/public/images/emoji/briefcase.png new file mode 100644 index 00000000..3491b84d Binary files /dev/null and b/public/images/emoji/briefcase.png differ diff --git a/public/images/emoji/broken_heart.png b/public/images/emoji/broken_heart.png new file mode 100644 index 00000000..cc70df0c Binary files /dev/null and b/public/images/emoji/broken_heart.png differ diff --git a/public/images/emoji/bug.png b/public/images/emoji/bug.png new file mode 100644 index 00000000..2230749e Binary files /dev/null and b/public/images/emoji/bug.png differ diff --git a/public/images/emoji/bulb.png b/public/images/emoji/bulb.png new file mode 100644 index 00000000..02638b30 Binary files /dev/null and b/public/images/emoji/bulb.png differ diff --git a/public/images/emoji/bullettrain_front.png b/public/images/emoji/bullettrain_front.png new file mode 100644 index 00000000..c64c517c Binary files /dev/null and b/public/images/emoji/bullettrain_front.png differ diff --git a/public/images/emoji/bullettrain_side.png b/public/images/emoji/bullettrain_side.png new file mode 100644 index 00000000..39499c1e Binary files /dev/null and b/public/images/emoji/bullettrain_side.png differ diff --git a/public/images/emoji/bus.png b/public/images/emoji/bus.png new file mode 100644 index 00000000..7014c9ae Binary files /dev/null and b/public/images/emoji/bus.png differ diff --git a/public/images/emoji/busstop.png b/public/images/emoji/busstop.png new file mode 100644 index 00000000..c806a037 Binary files /dev/null and b/public/images/emoji/busstop.png differ diff --git a/public/images/emoji/cactus.png b/public/images/emoji/cactus.png new file mode 100644 index 00000000..fb8eb2de Binary files /dev/null and b/public/images/emoji/cactus.png differ diff --git a/public/images/emoji/cake.png b/public/images/emoji/cake.png new file mode 100644 index 00000000..80b9e654 Binary files /dev/null and b/public/images/emoji/cake.png differ diff --git a/public/images/emoji/calling.png b/public/images/emoji/calling.png new file mode 100644 index 00000000..4309feb5 Binary files /dev/null and b/public/images/emoji/calling.png differ diff --git a/public/images/emoji/camel.png b/public/images/emoji/camel.png new file mode 100644 index 00000000..5d022a41 Binary files /dev/null and b/public/images/emoji/camel.png differ diff --git a/public/images/emoji/camera.png b/public/images/emoji/camera.png new file mode 100644 index 00000000..9909c287 Binary files /dev/null and b/public/images/emoji/camera.png differ diff --git a/public/images/emoji/cancer.png b/public/images/emoji/cancer.png new file mode 100644 index 00000000..e0c95e8c Binary files /dev/null and b/public/images/emoji/cancer.png differ diff --git a/public/images/emoji/capricorn.png b/public/images/emoji/capricorn.png new file mode 100644 index 00000000..6c73c8e3 Binary files /dev/null and b/public/images/emoji/capricorn.png differ diff --git a/public/images/emoji/car.png b/public/images/emoji/car.png new file mode 100644 index 00000000..c8bc8020 Binary files /dev/null and b/public/images/emoji/car.png differ diff --git a/public/images/emoji/cat.png b/public/images/emoji/cat.png new file mode 100644 index 00000000..31631e59 Binary files /dev/null and b/public/images/emoji/cat.png differ diff --git a/public/images/emoji/cd.png b/public/images/emoji/cd.png new file mode 100644 index 00000000..9dec2a4b Binary files /dev/null and b/public/images/emoji/cd.png differ diff --git a/public/images/emoji/chart.png b/public/images/emoji/chart.png new file mode 100644 index 00000000..14853baf Binary files /dev/null and b/public/images/emoji/chart.png differ diff --git a/public/images/emoji/checkered_flag.png b/public/images/emoji/checkered_flag.png new file mode 100644 index 00000000..f65aa36c Binary files /dev/null and b/public/images/emoji/checkered_flag.png differ diff --git a/public/images/emoji/cherry_blossom.png b/public/images/emoji/cherry_blossom.png new file mode 100644 index 00000000..2d7612c2 Binary files /dev/null and b/public/images/emoji/cherry_blossom.png differ diff --git a/public/images/emoji/chicken.png b/public/images/emoji/chicken.png new file mode 100644 index 00000000..2b57ed25 Binary files /dev/null and b/public/images/emoji/chicken.png differ diff --git a/public/images/emoji/christmas_tree.png b/public/images/emoji/christmas_tree.png new file mode 100644 index 00000000..ec99e0be Binary files /dev/null and b/public/images/emoji/christmas_tree.png differ diff --git a/public/images/emoji/church.png b/public/images/emoji/church.png new file mode 100644 index 00000000..3600c589 Binary files /dev/null and b/public/images/emoji/church.png differ diff --git a/public/images/emoji/cinema.png b/public/images/emoji/cinema.png new file mode 100644 index 00000000..448ff809 Binary files /dev/null and b/public/images/emoji/cinema.png differ diff --git a/public/images/emoji/city_sunrise.png b/public/images/emoji/city_sunrise.png new file mode 100644 index 00000000..a076d9df Binary files /dev/null and b/public/images/emoji/city_sunrise.png differ diff --git a/public/images/emoji/city_sunset.png b/public/images/emoji/city_sunset.png new file mode 100644 index 00000000..78fc5c4a Binary files /dev/null and b/public/images/emoji/city_sunset.png differ diff --git a/public/images/emoji/clap.png b/public/images/emoji/clap.png new file mode 100644 index 00000000..a3845d70 Binary files /dev/null and b/public/images/emoji/clap.png differ diff --git a/public/images/emoji/clapper.png b/public/images/emoji/clapper.png new file mode 100644 index 00000000..1af03bd7 Binary files /dev/null and b/public/images/emoji/clapper.png differ diff --git a/public/images/emoji/clock1.png b/public/images/emoji/clock1.png new file mode 100644 index 00000000..4c55f8f7 Binary files /dev/null and b/public/images/emoji/clock1.png differ diff --git a/public/images/emoji/clock10.png b/public/images/emoji/clock10.png new file mode 100644 index 00000000..d097b7f0 Binary files /dev/null and b/public/images/emoji/clock10.png differ diff --git a/public/images/emoji/clock11.png b/public/images/emoji/clock11.png new file mode 100644 index 00000000..0a101daa Binary files /dev/null and b/public/images/emoji/clock11.png differ diff --git a/public/images/emoji/clock12.png b/public/images/emoji/clock12.png new file mode 100644 index 00000000..e028d673 Binary files /dev/null and b/public/images/emoji/clock12.png differ diff --git a/public/images/emoji/clock2.png b/public/images/emoji/clock2.png new file mode 100644 index 00000000..83a23ddb Binary files /dev/null and b/public/images/emoji/clock2.png differ diff --git a/public/images/emoji/clock3.png b/public/images/emoji/clock3.png new file mode 100644 index 00000000..880176e4 Binary files /dev/null and b/public/images/emoji/clock3.png differ diff --git a/public/images/emoji/clock4.png b/public/images/emoji/clock4.png new file mode 100644 index 00000000..cc9f3648 Binary files /dev/null and b/public/images/emoji/clock4.png differ diff --git a/public/images/emoji/clock5.png b/public/images/emoji/clock5.png new file mode 100644 index 00000000..49626ea7 Binary files /dev/null and b/public/images/emoji/clock5.png differ diff --git a/public/images/emoji/clock6.png b/public/images/emoji/clock6.png new file mode 100644 index 00000000..08cc70d2 Binary files /dev/null and b/public/images/emoji/clock6.png differ diff --git a/public/images/emoji/clock7.png b/public/images/emoji/clock7.png new file mode 100644 index 00000000..26fcf6e0 Binary files /dev/null and b/public/images/emoji/clock7.png differ diff --git a/public/images/emoji/clock8.png b/public/images/emoji/clock8.png new file mode 100644 index 00000000..df1b0ad2 Binary files /dev/null and b/public/images/emoji/clock8.png differ diff --git a/public/images/emoji/clock9.png b/public/images/emoji/clock9.png new file mode 100644 index 00000000..649a79cb Binary files /dev/null and b/public/images/emoji/clock9.png differ diff --git a/public/images/emoji/closed_umbrella.png b/public/images/emoji/closed_umbrella.png new file mode 100644 index 00000000..0fdfb872 Binary files /dev/null and b/public/images/emoji/closed_umbrella.png differ diff --git a/public/images/emoji/cloud.png b/public/images/emoji/cloud.png new file mode 100644 index 00000000..564d056d Binary files /dev/null and b/public/images/emoji/cloud.png differ diff --git a/public/images/emoji/clubs.png b/public/images/emoji/clubs.png new file mode 100644 index 00000000..cc1b874b Binary files /dev/null and b/public/images/emoji/clubs.png differ diff --git a/public/images/emoji/cn.png b/public/images/emoji/cn.png new file mode 100644 index 00000000..75cf144d Binary files /dev/null and b/public/images/emoji/cn.png differ diff --git a/public/images/emoji/cocktail.png b/public/images/emoji/cocktail.png new file mode 100644 index 00000000..c003656e Binary files /dev/null and b/public/images/emoji/cocktail.png differ diff --git a/public/images/emoji/coffee.png b/public/images/emoji/coffee.png new file mode 100644 index 00000000..076281d5 Binary files /dev/null and b/public/images/emoji/coffee.png differ diff --git a/public/images/emoji/cold_sweat.png b/public/images/emoji/cold_sweat.png new file mode 100644 index 00000000..dc53962a Binary files /dev/null and b/public/images/emoji/cold_sweat.png differ diff --git a/public/images/emoji/computer.png b/public/images/emoji/computer.png new file mode 100644 index 00000000..f7075d4b Binary files /dev/null and b/public/images/emoji/computer.png differ diff --git a/public/images/emoji/confounded.png b/public/images/emoji/confounded.png new file mode 100644 index 00000000..219dafef Binary files /dev/null and b/public/images/emoji/confounded.png differ diff --git a/public/images/emoji/congratulations.png b/public/images/emoji/congratulations.png new file mode 100644 index 00000000..7d783977 Binary files /dev/null and b/public/images/emoji/congratulations.png differ diff --git a/public/images/emoji/construction.png b/public/images/emoji/construction.png new file mode 100644 index 00000000..b0c95584 Binary files /dev/null and b/public/images/emoji/construction.png differ diff --git a/public/images/emoji/construction_worker.png b/public/images/emoji/construction_worker.png new file mode 100644 index 00000000..7eed109b Binary files /dev/null and b/public/images/emoji/construction_worker.png differ diff --git a/public/images/emoji/convenience_store.png b/public/images/emoji/convenience_store.png new file mode 100644 index 00000000..5c1a906a Binary files /dev/null and b/public/images/emoji/convenience_store.png differ diff --git a/public/images/emoji/cool.png b/public/images/emoji/cool.png new file mode 100644 index 00000000..8dbf6aa6 Binary files /dev/null and b/public/images/emoji/cool.png differ diff --git a/public/images/emoji/cop.png b/public/images/emoji/cop.png new file mode 100644 index 00000000..b3a62914 Binary files /dev/null and b/public/images/emoji/cop.png differ diff --git a/public/images/emoji/copyright.png b/public/images/emoji/copyright.png new file mode 100644 index 00000000..00a6b07a Binary files /dev/null and b/public/images/emoji/copyright.png differ diff --git a/public/images/emoji/couple.png b/public/images/emoji/couple.png new file mode 100644 index 00000000..698ed8ce Binary files /dev/null and b/public/images/emoji/couple.png differ diff --git a/public/images/emoji/couple_with_heart.png b/public/images/emoji/couple_with_heart.png new file mode 100644 index 00000000..8652482f Binary files /dev/null and b/public/images/emoji/couple_with_heart.png differ diff --git a/public/images/emoji/couplekiss.png b/public/images/emoji/couplekiss.png new file mode 100644 index 00000000..0468b41c Binary files /dev/null and b/public/images/emoji/couplekiss.png differ diff --git a/public/images/emoji/cow.png b/public/images/emoji/cow.png new file mode 100644 index 00000000..efe8a44e Binary files /dev/null and b/public/images/emoji/cow.png differ diff --git a/public/images/emoji/crossed_flags.png b/public/images/emoji/crossed_flags.png new file mode 100644 index 00000000..9f95128c Binary files /dev/null and b/public/images/emoji/crossed_flags.png differ diff --git a/public/images/emoji/crown.png b/public/images/emoji/crown.png new file mode 100644 index 00000000..5b7e2a9e Binary files /dev/null and b/public/images/emoji/crown.png differ diff --git a/public/images/emoji/cry.png b/public/images/emoji/cry.png new file mode 100644 index 00000000..11175cee Binary files /dev/null and b/public/images/emoji/cry.png differ diff --git a/public/images/emoji/cupid.png b/public/images/emoji/cupid.png new file mode 100644 index 00000000..9791bfb0 Binary files /dev/null and b/public/images/emoji/cupid.png differ diff --git a/public/images/emoji/currency_exchange.png b/public/images/emoji/currency_exchange.png new file mode 100644 index 00000000..8d846b85 Binary files /dev/null and b/public/images/emoji/currency_exchange.png differ diff --git a/public/images/emoji/curry.png b/public/images/emoji/curry.png new file mode 100644 index 00000000..cd470810 Binary files /dev/null and b/public/images/emoji/curry.png differ diff --git a/public/images/emoji/cyclone.png b/public/images/emoji/cyclone.png new file mode 100644 index 00000000..94216ffb Binary files /dev/null and b/public/images/emoji/cyclone.png differ diff --git a/public/images/emoji/dancer.png b/public/images/emoji/dancer.png new file mode 100644 index 00000000..2a9895b4 Binary files /dev/null and b/public/images/emoji/dancer.png differ diff --git a/public/images/emoji/dancers.png b/public/images/emoji/dancers.png new file mode 100644 index 00000000..4e48231e Binary files /dev/null and b/public/images/emoji/dancers.png differ diff --git a/public/images/emoji/dango.png b/public/images/emoji/dango.png new file mode 100644 index 00000000..27d2c1f8 Binary files /dev/null and b/public/images/emoji/dango.png differ diff --git a/public/images/emoji/dart.png b/public/images/emoji/dart.png new file mode 100644 index 00000000..d35614a2 Binary files /dev/null and b/public/images/emoji/dart.png differ diff --git a/public/images/emoji/dash.png b/public/images/emoji/dash.png new file mode 100644 index 00000000..534ef442 Binary files /dev/null and b/public/images/emoji/dash.png differ diff --git a/public/images/emoji/de.png b/public/images/emoji/de.png new file mode 100644 index 00000000..f0dde235 Binary files /dev/null and b/public/images/emoji/de.png differ diff --git a/public/images/emoji/department_store.png b/public/images/emoji/department_store.png new file mode 100644 index 00000000..4330c8ac Binary files /dev/null and b/public/images/emoji/department_store.png differ diff --git a/public/images/emoji/diamonds.png b/public/images/emoji/diamonds.png new file mode 100644 index 00000000..be9cdffc Binary files /dev/null and b/public/images/emoji/diamonds.png differ diff --git a/public/images/emoji/disappointed.png b/public/images/emoji/disappointed.png new file mode 100644 index 00000000..cc18531c Binary files /dev/null and b/public/images/emoji/disappointed.png differ diff --git a/public/images/emoji/dog.png b/public/images/emoji/dog.png new file mode 100644 index 00000000..43dbf654 Binary files /dev/null and b/public/images/emoji/dog.png differ diff --git a/public/images/emoji/dolls.png b/public/images/emoji/dolls.png new file mode 100644 index 00000000..0edb37b0 Binary files /dev/null and b/public/images/emoji/dolls.png differ diff --git a/public/images/emoji/dolphin.png b/public/images/emoji/dolphin.png new file mode 100644 index 00000000..bc15516f Binary files /dev/null and b/public/images/emoji/dolphin.png differ diff --git a/public/images/emoji/dress.png b/public/images/emoji/dress.png new file mode 100644 index 00000000..3884e546 Binary files /dev/null and b/public/images/emoji/dress.png differ diff --git a/public/images/emoji/dvd.png b/public/images/emoji/dvd.png new file mode 100644 index 00000000..f38631ae Binary files /dev/null and b/public/images/emoji/dvd.png differ diff --git a/public/images/emoji/ear.png b/public/images/emoji/ear.png new file mode 100644 index 00000000..26fd9757 Binary files /dev/null and b/public/images/emoji/ear.png differ diff --git a/public/images/emoji/ear_of_rice.png b/public/images/emoji/ear_of_rice.png new file mode 100644 index 00000000..9a64b786 Binary files /dev/null and b/public/images/emoji/ear_of_rice.png differ diff --git a/public/images/emoji/egg.png b/public/images/emoji/egg.png new file mode 100644 index 00000000..7ca9357f Binary files /dev/null and b/public/images/emoji/egg.png differ diff --git a/public/images/emoji/eggplant.png b/public/images/emoji/eggplant.png new file mode 100644 index 00000000..73582101 Binary files /dev/null and b/public/images/emoji/eggplant.png differ diff --git a/public/images/emoji/egplant.png b/public/images/emoji/egplant.png new file mode 100644 index 00000000..b12cad33 Binary files /dev/null and b/public/images/emoji/egplant.png differ diff --git a/public/images/emoji/eight_pointed_black_star.png b/public/images/emoji/eight_pointed_black_star.png new file mode 100644 index 00000000..9693e50c Binary files /dev/null and b/public/images/emoji/eight_pointed_black_star.png differ diff --git a/public/images/emoji/eight_spoked_asterisk.png b/public/images/emoji/eight_spoked_asterisk.png new file mode 100644 index 00000000..459c1d2d Binary files /dev/null and b/public/images/emoji/eight_spoked_asterisk.png differ diff --git a/public/images/emoji/elephant.png b/public/images/emoji/elephant.png new file mode 100644 index 00000000..c8010a66 Binary files /dev/null and b/public/images/emoji/elephant.png differ diff --git a/public/images/emoji/email.png b/public/images/emoji/email.png new file mode 100644 index 00000000..22584b9b Binary files /dev/null and b/public/images/emoji/email.png differ diff --git a/public/images/emoji/es.png b/public/images/emoji/es.png new file mode 100644 index 00000000..e6fa0f2f Binary files /dev/null and b/public/images/emoji/es.png differ diff --git a/public/images/emoji/european_castle.png b/public/images/emoji/european_castle.png new file mode 100644 index 00000000..8a8a4c99 Binary files /dev/null and b/public/images/emoji/european_castle.png differ diff --git a/public/images/emoji/exclamation.png b/public/images/emoji/exclamation.png new file mode 100644 index 00000000..2171aa8d Binary files /dev/null and b/public/images/emoji/exclamation.png differ diff --git a/public/images/emoji/eyes.png b/public/images/emoji/eyes.png new file mode 100644 index 00000000..b02c44e3 Binary files /dev/null and b/public/images/emoji/eyes.png differ diff --git a/public/images/emoji/factory.png b/public/images/emoji/factory.png new file mode 100644 index 00000000..f80c4ec6 Binary files /dev/null and b/public/images/emoji/factory.png differ diff --git a/public/images/emoji/fallen_leaf.png b/public/images/emoji/fallen_leaf.png new file mode 100644 index 00000000..dc6c3137 Binary files /dev/null and b/public/images/emoji/fallen_leaf.png differ diff --git a/public/images/emoji/fast_forward.png b/public/images/emoji/fast_forward.png new file mode 100644 index 00000000..c478e558 Binary files /dev/null and b/public/images/emoji/fast_forward.png differ diff --git a/public/images/emoji/fax.png b/public/images/emoji/fax.png new file mode 100644 index 00000000..e20110fe Binary files /dev/null and b/public/images/emoji/fax.png differ diff --git a/public/images/emoji/fearful.png b/public/images/emoji/fearful.png new file mode 100644 index 00000000..46765149 Binary files /dev/null and b/public/images/emoji/fearful.png differ diff --git a/public/images/emoji/feelsgood.png b/public/images/emoji/feelsgood.png new file mode 100644 index 00000000..54567b97 Binary files /dev/null and b/public/images/emoji/feelsgood.png differ diff --git a/public/images/emoji/feet.png b/public/images/emoji/feet.png new file mode 100644 index 00000000..af5261aa Binary files /dev/null and b/public/images/emoji/feet.png differ diff --git a/public/images/emoji/ferris_wheel.png b/public/images/emoji/ferris_wheel.png new file mode 100644 index 00000000..9b791ca5 Binary files /dev/null and b/public/images/emoji/ferris_wheel.png differ diff --git a/public/images/emoji/finnadie.png b/public/images/emoji/finnadie.png new file mode 100644 index 00000000..12394fc8 Binary files /dev/null and b/public/images/emoji/finnadie.png differ diff --git a/public/images/emoji/fire.png b/public/images/emoji/fire.png new file mode 100644 index 00000000..fd6bc84e Binary files /dev/null and b/public/images/emoji/fire.png differ diff --git a/public/images/emoji/fire_engine.png b/public/images/emoji/fire_engine.png new file mode 100644 index 00000000..1c115bba Binary files /dev/null and b/public/images/emoji/fire_engine.png differ diff --git a/public/images/emoji/fireworks.png b/public/images/emoji/fireworks.png new file mode 100644 index 00000000..435247db Binary files /dev/null and b/public/images/emoji/fireworks.png differ diff --git a/public/images/emoji/fish.png b/public/images/emoji/fish.png new file mode 100644 index 00000000..e0195747 Binary files /dev/null and b/public/images/emoji/fish.png differ diff --git a/public/images/emoji/fist.png b/public/images/emoji/fist.png new file mode 100644 index 00000000..2d4a5147 Binary files /dev/null and b/public/images/emoji/fist.png differ diff --git a/public/images/emoji/flags.png b/public/images/emoji/flags.png new file mode 100644 index 00000000..ed6d0153 Binary files /dev/null and b/public/images/emoji/flags.png differ diff --git a/public/images/emoji/flushed.png b/public/images/emoji/flushed.png new file mode 100644 index 00000000..866466ba Binary files /dev/null and b/public/images/emoji/flushed.png differ diff --git a/public/images/emoji/football.png b/public/images/emoji/football.png new file mode 100644 index 00000000..07d67ece Binary files /dev/null and b/public/images/emoji/football.png differ diff --git a/public/images/emoji/fork_and_knife.png b/public/images/emoji/fork_and_knife.png new file mode 100644 index 00000000..8f031940 Binary files /dev/null and b/public/images/emoji/fork_and_knife.png differ diff --git a/public/images/emoji/fountain.png b/public/images/emoji/fountain.png new file mode 100644 index 00000000..38b52329 Binary files /dev/null and b/public/images/emoji/fountain.png differ diff --git a/public/images/emoji/four_leaf_clover.png b/public/images/emoji/four_leaf_clover.png new file mode 100644 index 00000000..adaf4ce1 Binary files /dev/null and b/public/images/emoji/four_leaf_clover.png differ diff --git a/public/images/emoji/fr.png b/public/images/emoji/fr.png new file mode 100644 index 00000000..2a2afb76 Binary files /dev/null and b/public/images/emoji/fr.png differ diff --git a/public/images/emoji/fries.png b/public/images/emoji/fries.png new file mode 100644 index 00000000..727b5578 Binary files /dev/null and b/public/images/emoji/fries.png differ diff --git a/public/images/emoji/frog.png b/public/images/emoji/frog.png new file mode 100644 index 00000000..bac9a67e Binary files /dev/null and b/public/images/emoji/frog.png differ diff --git a/public/images/emoji/fuelpump.png b/public/images/emoji/fuelpump.png new file mode 100644 index 00000000..d229b667 Binary files /dev/null and b/public/images/emoji/fuelpump.png differ diff --git a/public/images/emoji/gb.png b/public/images/emoji/gb.png new file mode 100644 index 00000000..d9eab20a Binary files /dev/null and b/public/images/emoji/gb.png differ diff --git a/public/images/emoji/gem.png b/public/images/emoji/gem.png new file mode 100644 index 00000000..1245c0ad Binary files /dev/null and b/public/images/emoji/gem.png differ diff --git a/public/images/emoji/gemini.png b/public/images/emoji/gemini.png new file mode 100644 index 00000000..db22fba8 Binary files /dev/null and b/public/images/emoji/gemini.png differ diff --git a/public/images/emoji/ghost.png b/public/images/emoji/ghost.png new file mode 100644 index 00000000..23408c40 Binary files /dev/null and b/public/images/emoji/ghost.png differ diff --git a/public/images/emoji/gift.png b/public/images/emoji/gift.png new file mode 100644 index 00000000..b6262ebb Binary files /dev/null and b/public/images/emoji/gift.png differ diff --git a/public/images/emoji/gift_heart.png b/public/images/emoji/gift_heart.png new file mode 100644 index 00000000..12305e24 Binary files /dev/null and b/public/images/emoji/gift_heart.png differ diff --git a/public/images/emoji/girl.png b/public/images/emoji/girl.png new file mode 100644 index 00000000..98c032da Binary files /dev/null and b/public/images/emoji/girl.png differ diff --git a/public/images/emoji/goberserk.png b/public/images/emoji/goberserk.png new file mode 100644 index 00000000..8d3917a5 Binary files /dev/null and b/public/images/emoji/goberserk.png differ diff --git a/public/images/emoji/godmode.png b/public/images/emoji/godmode.png new file mode 100644 index 00000000..d8feb0d8 Binary files /dev/null and b/public/images/emoji/godmode.png differ diff --git a/public/images/emoji/golf.png b/public/images/emoji/golf.png new file mode 100644 index 00000000..f30131f6 Binary files /dev/null and b/public/images/emoji/golf.png differ diff --git a/public/images/emoji/green_heart.png b/public/images/emoji/green_heart.png new file mode 100644 index 00000000..1b0b4d16 Binary files /dev/null and b/public/images/emoji/green_heart.png differ diff --git a/public/images/emoji/grey_exclamation.png b/public/images/emoji/grey_exclamation.png new file mode 100644 index 00000000..c94a2b93 Binary files /dev/null and b/public/images/emoji/grey_exclamation.png differ diff --git a/public/images/emoji/grey_question.png b/public/images/emoji/grey_question.png new file mode 100644 index 00000000..a50cca2a Binary files /dev/null and b/public/images/emoji/grey_question.png differ diff --git a/public/images/emoji/grin.png b/public/images/emoji/grin.png new file mode 100644 index 00000000..694bf56f Binary files /dev/null and b/public/images/emoji/grin.png differ diff --git a/public/images/emoji/guardsman.png b/public/images/emoji/guardsman.png new file mode 100644 index 00000000..c228553b Binary files /dev/null and b/public/images/emoji/guardsman.png differ diff --git a/public/images/emoji/guitar.png b/public/images/emoji/guitar.png new file mode 100644 index 00000000..81ee4722 Binary files /dev/null and b/public/images/emoji/guitar.png differ diff --git a/public/images/emoji/gun.png b/public/images/emoji/gun.png new file mode 100644 index 00000000..24209c4a Binary files /dev/null and b/public/images/emoji/gun.png differ diff --git a/public/images/emoji/haircut.png b/public/images/emoji/haircut.png new file mode 100644 index 00000000..c3bca9b4 Binary files /dev/null and b/public/images/emoji/haircut.png differ diff --git a/public/images/emoji/hamburger.png b/public/images/emoji/hamburger.png new file mode 100644 index 00000000..f3c76f63 Binary files /dev/null and b/public/images/emoji/hamburger.png differ diff --git a/public/images/emoji/hammer.png b/public/images/emoji/hammer.png new file mode 100644 index 00000000..99f5a2f5 Binary files /dev/null and b/public/images/emoji/hammer.png differ diff --git a/public/images/emoji/hamster.png b/public/images/emoji/hamster.png new file mode 100644 index 00000000..5c9340b0 Binary files /dev/null and b/public/images/emoji/hamster.png differ diff --git a/public/images/emoji/hand.png b/public/images/emoji/hand.png new file mode 100644 index 00000000..1cdf992f Binary files /dev/null and b/public/images/emoji/hand.png differ diff --git a/public/images/emoji/handbag.png b/public/images/emoji/handbag.png new file mode 100644 index 00000000..34fec65c Binary files /dev/null and b/public/images/emoji/handbag.png differ diff --git a/public/images/emoji/hankey.png b/public/images/emoji/hankey.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/public/images/emoji/hankey.png differ diff --git a/public/images/emoji/hash.png b/public/images/emoji/hash.png new file mode 100644 index 00000000..4fdc5cc0 Binary files /dev/null and b/public/images/emoji/hash.png differ diff --git a/public/images/emoji/headphones.png b/public/images/emoji/headphones.png new file mode 100644 index 00000000..440ed43f Binary files /dev/null and b/public/images/emoji/headphones.png differ diff --git a/public/images/emoji/heart.png b/public/images/emoji/heart.png new file mode 100644 index 00000000..5de16c9f Binary files /dev/null and b/public/images/emoji/heart.png differ diff --git a/public/images/emoji/heart_decoration.png b/public/images/emoji/heart_decoration.png new file mode 100644 index 00000000..f895cf53 Binary files /dev/null and b/public/images/emoji/heart_decoration.png differ diff --git a/public/images/emoji/heart_eyes.png b/public/images/emoji/heart_eyes.png new file mode 100644 index 00000000..ef85cb66 Binary files /dev/null and b/public/images/emoji/heart_eyes.png differ diff --git a/public/images/emoji/heartbeat.png b/public/images/emoji/heartbeat.png new file mode 100644 index 00000000..ce670748 Binary files /dev/null and b/public/images/emoji/heartbeat.png differ diff --git a/public/images/emoji/heartpulse.png b/public/images/emoji/heartpulse.png new file mode 100644 index 00000000..dc7e55d3 Binary files /dev/null and b/public/images/emoji/heartpulse.png differ diff --git a/public/images/emoji/hearts.png b/public/images/emoji/hearts.png new file mode 100644 index 00000000..be35ebdd Binary files /dev/null and b/public/images/emoji/hearts.png differ diff --git a/public/images/emoji/hibiscus.png b/public/images/emoji/hibiscus.png new file mode 100644 index 00000000..0f1c4af0 Binary files /dev/null and b/public/images/emoji/hibiscus.png differ diff --git a/public/images/emoji/high_heel.png b/public/images/emoji/high_heel.png new file mode 100644 index 00000000..275389ed Binary files /dev/null and b/public/images/emoji/high_heel.png differ diff --git a/public/images/emoji/horse.png b/public/images/emoji/horse.png new file mode 100644 index 00000000..9e43abfd Binary files /dev/null and b/public/images/emoji/horse.png differ diff --git a/public/images/emoji/hospital.png b/public/images/emoji/hospital.png new file mode 100644 index 00000000..2c72c9a5 Binary files /dev/null and b/public/images/emoji/hospital.png differ diff --git a/public/images/emoji/hotel.png b/public/images/emoji/hotel.png new file mode 100644 index 00000000..1b1b48ee Binary files /dev/null and b/public/images/emoji/hotel.png differ diff --git a/public/images/emoji/hotsprings.png b/public/images/emoji/hotsprings.png new file mode 100644 index 00000000..64c6a1d7 Binary files /dev/null and b/public/images/emoji/hotsprings.png differ diff --git a/public/images/emoji/house.png b/public/images/emoji/house.png new file mode 100644 index 00000000..fdaeca1a Binary files /dev/null and b/public/images/emoji/house.png differ diff --git a/public/images/emoji/hurtrealbad.png b/public/images/emoji/hurtrealbad.png new file mode 100644 index 00000000..68153c60 Binary files /dev/null and b/public/images/emoji/hurtrealbad.png differ diff --git a/public/images/emoji/icecream.png b/public/images/emoji/icecream.png new file mode 100644 index 00000000..22d32c5b Binary files /dev/null and b/public/images/emoji/icecream.png differ diff --git a/public/images/emoji/id.png b/public/images/emoji/id.png new file mode 100644 index 00000000..0bd32b0e Binary files /dev/null and b/public/images/emoji/id.png differ diff --git a/public/images/emoji/ideograph_advantage.png b/public/images/emoji/ideograph_advantage.png new file mode 100644 index 00000000..fad3f964 Binary files /dev/null and b/public/images/emoji/ideograph_advantage.png differ diff --git a/public/images/emoji/imp.png b/public/images/emoji/imp.png new file mode 100644 index 00000000..c69f6b70 Binary files /dev/null and b/public/images/emoji/imp.png differ diff --git a/public/images/emoji/information_desk_person.png b/public/images/emoji/information_desk_person.png new file mode 100644 index 00000000..f6eb7216 Binary files /dev/null and b/public/images/emoji/information_desk_person.png differ diff --git a/public/images/emoji/iphone.png b/public/images/emoji/iphone.png new file mode 100644 index 00000000..7995a678 Binary files /dev/null and b/public/images/emoji/iphone.png differ diff --git a/public/images/emoji/it.png b/public/images/emoji/it.png new file mode 100644 index 00000000..fc3e8a2d Binary files /dev/null and b/public/images/emoji/it.png differ diff --git a/public/images/emoji/jack_o_lantern.png b/public/images/emoji/jack_o_lantern.png new file mode 100644 index 00000000..23ae0e98 Binary files /dev/null and b/public/images/emoji/jack_o_lantern.png differ diff --git a/public/images/emoji/japanese_castle.png b/public/images/emoji/japanese_castle.png new file mode 100644 index 00000000..bb76bcc0 Binary files /dev/null and b/public/images/emoji/japanese_castle.png differ diff --git a/public/images/emoji/joy.png b/public/images/emoji/joy.png new file mode 100644 index 00000000..f6f27e48 Binary files /dev/null and b/public/images/emoji/joy.png differ diff --git a/public/images/emoji/jp.png b/public/images/emoji/jp.png new file mode 100644 index 00000000..8c6e76d7 Binary files /dev/null and b/public/images/emoji/jp.png differ diff --git a/public/images/emoji/key.png b/public/images/emoji/key.png new file mode 100644 index 00000000..05159c57 Binary files /dev/null and b/public/images/emoji/key.png differ diff --git a/public/images/emoji/kimono.png b/public/images/emoji/kimono.png new file mode 100644 index 00000000..4c9456e7 Binary files /dev/null and b/public/images/emoji/kimono.png differ diff --git a/public/images/emoji/kiss.png b/public/images/emoji/kiss.png new file mode 100644 index 00000000..141bb429 Binary files /dev/null and b/public/images/emoji/kiss.png differ diff --git a/public/images/emoji/kissing_face.png b/public/images/emoji/kissing_face.png new file mode 100644 index 00000000..6143085a Binary files /dev/null and b/public/images/emoji/kissing_face.png differ diff --git a/public/images/emoji/kissing_heart.png b/public/images/emoji/kissing_heart.png new file mode 100644 index 00000000..df01721b Binary files /dev/null and b/public/images/emoji/kissing_heart.png differ diff --git a/public/images/emoji/koala.png b/public/images/emoji/koala.png new file mode 100644 index 00000000..cac71a4e Binary files /dev/null and b/public/images/emoji/koala.png differ diff --git a/public/images/emoji/koko.png b/public/images/emoji/koko.png new file mode 100644 index 00000000..dd6e90c1 Binary files /dev/null and b/public/images/emoji/koko.png differ diff --git a/public/images/emoji/kr.png b/public/images/emoji/kr.png new file mode 100644 index 00000000..c37b34d5 Binary files /dev/null and b/public/images/emoji/kr.png differ diff --git a/public/images/emoji/leaves.png b/public/images/emoji/leaves.png new file mode 100644 index 00000000..9021b3ea Binary files /dev/null and b/public/images/emoji/leaves.png differ diff --git a/public/images/emoji/leo.png b/public/images/emoji/leo.png new file mode 100644 index 00000000..1432e36c Binary files /dev/null and b/public/images/emoji/leo.png differ diff --git a/public/images/emoji/libra.png b/public/images/emoji/libra.png new file mode 100644 index 00000000..bd35d66d Binary files /dev/null and b/public/images/emoji/libra.png differ diff --git a/public/images/emoji/lips.png b/public/images/emoji/lips.png new file mode 100644 index 00000000..f996a8a6 Binary files /dev/null and b/public/images/emoji/lips.png differ diff --git a/public/images/emoji/lipstick.png b/public/images/emoji/lipstick.png new file mode 100644 index 00000000..214ecded Binary files /dev/null and b/public/images/emoji/lipstick.png differ diff --git a/public/images/emoji/lock.png b/public/images/emoji/lock.png new file mode 100644 index 00000000..5c35d91d Binary files /dev/null and b/public/images/emoji/lock.png differ diff --git a/public/images/emoji/loop.png b/public/images/emoji/loop.png new file mode 100644 index 00000000..68807b91 Binary files /dev/null and b/public/images/emoji/loop.png differ diff --git a/public/images/emoji/loudspeaker.png b/public/images/emoji/loudspeaker.png new file mode 100644 index 00000000..d5ffa73b Binary files /dev/null and b/public/images/emoji/loudspeaker.png differ diff --git a/public/images/emoji/love_hotel.png b/public/images/emoji/love_hotel.png new file mode 100644 index 00000000..dc168a91 Binary files /dev/null and b/public/images/emoji/love_hotel.png differ diff --git a/public/images/emoji/mag.png b/public/images/emoji/mag.png new file mode 100644 index 00000000..9b03915a Binary files /dev/null and b/public/images/emoji/mag.png differ diff --git a/public/images/emoji/mahjong.png b/public/images/emoji/mahjong.png new file mode 100644 index 00000000..9fe286e2 Binary files /dev/null and b/public/images/emoji/mahjong.png differ diff --git a/public/images/emoji/mailbox.png b/public/images/emoji/mailbox.png new file mode 100644 index 00000000..47d2ee7e Binary files /dev/null and b/public/images/emoji/mailbox.png differ diff --git a/public/images/emoji/man.png b/public/images/emoji/man.png new file mode 100644 index 00000000..be0c82c6 Binary files /dev/null and b/public/images/emoji/man.png differ diff --git a/public/images/emoji/man_with_gua_pi_mao.png b/public/images/emoji/man_with_gua_pi_mao.png new file mode 100644 index 00000000..79448395 Binary files /dev/null and b/public/images/emoji/man_with_gua_pi_mao.png differ diff --git a/public/images/emoji/man_with_turban.png b/public/images/emoji/man_with_turban.png new file mode 100644 index 00000000..4a31f317 Binary files /dev/null and b/public/images/emoji/man_with_turban.png differ diff --git a/public/images/emoji/maple_leaf.png b/public/images/emoji/maple_leaf.png new file mode 100644 index 00000000..dc7d1bbc Binary files /dev/null and b/public/images/emoji/maple_leaf.png differ diff --git a/public/images/emoji/mask.png b/public/images/emoji/mask.png new file mode 100644 index 00000000..e71b212c Binary files /dev/null and b/public/images/emoji/mask.png differ diff --git a/public/images/emoji/massage.png b/public/images/emoji/massage.png new file mode 100644 index 00000000..89215138 Binary files /dev/null and b/public/images/emoji/massage.png differ diff --git a/public/images/emoji/mega.png b/public/images/emoji/mega.png new file mode 100644 index 00000000..d66178b2 Binary files /dev/null and b/public/images/emoji/mega.png differ diff --git a/public/images/emoji/memo.png b/public/images/emoji/memo.png new file mode 100644 index 00000000..9b890c3d Binary files /dev/null and b/public/images/emoji/memo.png differ diff --git a/public/images/emoji/mens.png b/public/images/emoji/mens.png new file mode 100644 index 00000000..1749c4aa Binary files /dev/null and b/public/images/emoji/mens.png differ diff --git a/public/images/emoji/metal.png b/public/images/emoji/metal.png new file mode 100644 index 00000000..1bbac1d4 Binary files /dev/null and b/public/images/emoji/metal.png differ diff --git a/public/images/emoji/metro.png b/public/images/emoji/metro.png new file mode 100644 index 00000000..ca0204a0 Binary files /dev/null and b/public/images/emoji/metro.png differ diff --git a/public/images/emoji/microphone.png b/public/images/emoji/microphone.png new file mode 100644 index 00000000..79dffda8 Binary files /dev/null and b/public/images/emoji/microphone.png differ diff --git a/public/images/emoji/minidisc.png b/public/images/emoji/minidisc.png new file mode 100644 index 00000000..8e8245bd Binary files /dev/null and b/public/images/emoji/minidisc.png differ diff --git a/public/images/emoji/mobile_phone_off.png b/public/images/emoji/mobile_phone_off.png new file mode 100644 index 00000000..621cf190 Binary files /dev/null and b/public/images/emoji/mobile_phone_off.png differ diff --git a/public/images/emoji/moneybag.png b/public/images/emoji/moneybag.png new file mode 100644 index 00000000..efafdf14 Binary files /dev/null and b/public/images/emoji/moneybag.png differ diff --git a/public/images/emoji/monkey.png b/public/images/emoji/monkey.png new file mode 100644 index 00000000..33b1381c Binary files /dev/null and b/public/images/emoji/monkey.png differ diff --git a/public/images/emoji/monkey_face.png b/public/images/emoji/monkey_face.png new file mode 100644 index 00000000..c137de49 Binary files /dev/null and b/public/images/emoji/monkey_face.png differ diff --git a/public/images/emoji/moon.png b/public/images/emoji/moon.png new file mode 100644 index 00000000..a2ace7ab Binary files /dev/null and b/public/images/emoji/moon.png differ diff --git a/public/images/emoji/mortar_board.png b/public/images/emoji/mortar_board.png new file mode 100644 index 00000000..a7df3e48 Binary files /dev/null and b/public/images/emoji/mortar_board.png differ diff --git a/public/images/emoji/mount_fuji.png b/public/images/emoji/mount_fuji.png new file mode 100644 index 00000000..2fdebf6e Binary files /dev/null and b/public/images/emoji/mount_fuji.png differ diff --git a/public/images/emoji/mouse.png b/public/images/emoji/mouse.png new file mode 100644 index 00000000..35da0e5c Binary files /dev/null and b/public/images/emoji/mouse.png differ diff --git a/public/images/emoji/movie_camera.png b/public/images/emoji/movie_camera.png new file mode 100644 index 00000000..ec2047ce Binary files /dev/null and b/public/images/emoji/movie_camera.png differ diff --git a/public/images/emoji/muscle.png b/public/images/emoji/muscle.png new file mode 100644 index 00000000..5381079f Binary files /dev/null and b/public/images/emoji/muscle.png differ diff --git a/public/images/emoji/musical_note.png b/public/images/emoji/musical_note.png new file mode 100644 index 00000000..476d49e4 Binary files /dev/null and b/public/images/emoji/musical_note.png differ diff --git a/public/images/emoji/nail_care.png b/public/images/emoji/nail_care.png new file mode 100644 index 00000000..acb0d774 Binary files /dev/null and b/public/images/emoji/nail_care.png differ diff --git a/public/images/emoji/necktie.png b/public/images/emoji/necktie.png new file mode 100644 index 00000000..e5909380 Binary files /dev/null and b/public/images/emoji/necktie.png differ diff --git a/public/images/emoji/new.png b/public/images/emoji/new.png new file mode 100644 index 00000000..8c586250 Binary files /dev/null and b/public/images/emoji/new.png differ diff --git a/public/images/emoji/no_good.png b/public/images/emoji/no_good.png new file mode 100644 index 00000000..06bc3a87 Binary files /dev/null and b/public/images/emoji/no_good.png differ diff --git a/public/images/emoji/no_smoking.png b/public/images/emoji/no_smoking.png new file mode 100644 index 00000000..a304c808 Binary files /dev/null and b/public/images/emoji/no_smoking.png differ diff --git a/public/images/emoji/nose.png b/public/images/emoji/nose.png new file mode 100644 index 00000000..6ecf9fbc Binary files /dev/null and b/public/images/emoji/nose.png differ diff --git a/public/images/emoji/notes.png b/public/images/emoji/notes.png new file mode 100644 index 00000000..4f445684 Binary files /dev/null and b/public/images/emoji/notes.png differ diff --git a/public/images/emoji/o.png b/public/images/emoji/o.png new file mode 100644 index 00000000..a283db8f Binary files /dev/null and b/public/images/emoji/o.png differ diff --git a/public/images/emoji/o2.png b/public/images/emoji/o2.png new file mode 100644 index 00000000..9858eed4 Binary files /dev/null and b/public/images/emoji/o2.png differ diff --git a/public/images/emoji/ocean.png b/public/images/emoji/ocean.png new file mode 100644 index 00000000..6f1bb9d1 Binary files /dev/null and b/public/images/emoji/ocean.png differ diff --git a/public/images/emoji/octocat.png b/public/images/emoji/octocat.png new file mode 100644 index 00000000..0b68cf0d Binary files /dev/null and b/public/images/emoji/octocat.png differ diff --git a/public/images/emoji/octopus.png b/public/images/emoji/octopus.png new file mode 100644 index 00000000..7deac05f Binary files /dev/null and b/public/images/emoji/octopus.png differ diff --git a/public/images/emoji/oden.png b/public/images/emoji/oden.png new file mode 100644 index 00000000..66fbc2c7 Binary files /dev/null and b/public/images/emoji/oden.png differ diff --git a/public/images/emoji/office.png b/public/images/emoji/office.png new file mode 100644 index 00000000..1b2a2862 Binary files /dev/null and b/public/images/emoji/office.png differ diff --git a/public/images/emoji/ok.png b/public/images/emoji/ok.png new file mode 100644 index 00000000..015870e2 Binary files /dev/null and b/public/images/emoji/ok.png differ diff --git a/public/images/emoji/ok_hand.png b/public/images/emoji/ok_hand.png new file mode 100644 index 00000000..636d39bb Binary files /dev/null and b/public/images/emoji/ok_hand.png differ diff --git a/public/images/emoji/ok_woman.png b/public/images/emoji/ok_woman.png new file mode 100644 index 00000000..3b3ebba6 Binary files /dev/null and b/public/images/emoji/ok_woman.png differ diff --git a/public/images/emoji/older_man.png b/public/images/emoji/older_man.png new file mode 100644 index 00000000..ecfb575a Binary files /dev/null and b/public/images/emoji/older_man.png differ diff --git a/public/images/emoji/older_woman.png b/public/images/emoji/older_woman.png new file mode 100644 index 00000000..1d565d8d Binary files /dev/null and b/public/images/emoji/older_woman.png differ diff --git a/public/images/emoji/open_hands.png b/public/images/emoji/open_hands.png new file mode 100644 index 00000000..bc2fe3de Binary files /dev/null and b/public/images/emoji/open_hands.png differ diff --git a/public/images/emoji/ophiuchus.png b/public/images/emoji/ophiuchus.png new file mode 100644 index 00000000..8c4be843 Binary files /dev/null and b/public/images/emoji/ophiuchus.png differ diff --git a/public/images/emoji/palm_tree.png b/public/images/emoji/palm_tree.png new file mode 100644 index 00000000..92fc3c2c Binary files /dev/null and b/public/images/emoji/palm_tree.png differ diff --git a/public/images/emoji/parking.png b/public/images/emoji/parking.png new file mode 100644 index 00000000..bd114958 Binary files /dev/null and b/public/images/emoji/parking.png differ diff --git a/public/images/emoji/part_alternation_mark.png b/public/images/emoji/part_alternation_mark.png new file mode 100644 index 00000000..bff6f750 Binary files /dev/null and b/public/images/emoji/part_alternation_mark.png differ diff --git a/public/images/emoji/pencil.png b/public/images/emoji/pencil.png new file mode 100644 index 00000000..9b890c3d Binary files /dev/null and b/public/images/emoji/pencil.png differ diff --git a/public/images/emoji/penguin.png b/public/images/emoji/penguin.png new file mode 100644 index 00000000..541e8531 Binary files /dev/null and b/public/images/emoji/penguin.png differ diff --git a/public/images/emoji/pensive.png b/public/images/emoji/pensive.png new file mode 100644 index 00000000..e6e1624a Binary files /dev/null and b/public/images/emoji/pensive.png differ diff --git a/public/images/emoji/persevere.png b/public/images/emoji/persevere.png new file mode 100644 index 00000000..a6a347ed Binary files /dev/null and b/public/images/emoji/persevere.png differ diff --git a/public/images/emoji/person_with_blond_hair.png b/public/images/emoji/person_with_blond_hair.png new file mode 100644 index 00000000..4abdfdf0 Binary files /dev/null and b/public/images/emoji/person_with_blond_hair.png differ diff --git a/public/images/emoji/phone.png b/public/images/emoji/phone.png new file mode 100644 index 00000000..e1d64368 Binary files /dev/null and b/public/images/emoji/phone.png differ diff --git a/public/images/emoji/pig.png b/public/images/emoji/pig.png new file mode 100644 index 00000000..38b05b41 Binary files /dev/null and b/public/images/emoji/pig.png differ diff --git a/public/images/emoji/pill.png b/public/images/emoji/pill.png new file mode 100644 index 00000000..405d1c57 Binary files /dev/null and b/public/images/emoji/pill.png differ diff --git a/public/images/emoji/pisces.png b/public/images/emoji/pisces.png new file mode 100644 index 00000000..5f49272f Binary files /dev/null and b/public/images/emoji/pisces.png differ diff --git a/public/images/emoji/plus1.png b/public/images/emoji/plus1.png new file mode 100644 index 00000000..4dae7a09 Binary files /dev/null and b/public/images/emoji/plus1.png differ diff --git a/public/images/emoji/point_down.png b/public/images/emoji/point_down.png new file mode 100644 index 00000000..37f4eb1b Binary files /dev/null and b/public/images/emoji/point_down.png differ diff --git a/public/images/emoji/point_left.png b/public/images/emoji/point_left.png new file mode 100644 index 00000000..4faf0db8 Binary files /dev/null and b/public/images/emoji/point_left.png differ diff --git a/public/images/emoji/point_right.png b/public/images/emoji/point_right.png new file mode 100644 index 00000000..6d0b8f3b Binary files /dev/null and b/public/images/emoji/point_right.png differ diff --git a/public/images/emoji/point_up.png b/public/images/emoji/point_up.png new file mode 100644 index 00000000..533a3d1b Binary files /dev/null and b/public/images/emoji/point_up.png differ diff --git a/public/images/emoji/point_up_2.png b/public/images/emoji/point_up_2.png new file mode 100644 index 00000000..87956d23 Binary files /dev/null and b/public/images/emoji/point_up_2.png differ diff --git a/public/images/emoji/police_car.png b/public/images/emoji/police_car.png new file mode 100644 index 00000000..00a4e173 Binary files /dev/null and b/public/images/emoji/police_car.png differ diff --git a/public/images/emoji/poop.png b/public/images/emoji/poop.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/public/images/emoji/poop.png differ diff --git a/public/images/emoji/post_office.png b/public/images/emoji/post_office.png new file mode 100644 index 00000000..4ec24548 Binary files /dev/null and b/public/images/emoji/post_office.png differ diff --git a/public/images/emoji/postbox.png b/public/images/emoji/postbox.png new file mode 100644 index 00000000..1cb2ea99 Binary files /dev/null and b/public/images/emoji/postbox.png differ diff --git a/public/images/emoji/pray.png b/public/images/emoji/pray.png new file mode 100644 index 00000000..b91bde40 Binary files /dev/null and b/public/images/emoji/pray.png differ diff --git a/public/images/emoji/princess.png b/public/images/emoji/princess.png new file mode 100644 index 00000000..90a2f9e1 Binary files /dev/null and b/public/images/emoji/princess.png differ diff --git a/public/images/emoji/punch.png b/public/images/emoji/punch.png new file mode 100644 index 00000000..52dbccae Binary files /dev/null and b/public/images/emoji/punch.png differ diff --git a/public/images/emoji/purple_heart.png b/public/images/emoji/purple_heart.png new file mode 100644 index 00000000..98c0bc72 Binary files /dev/null and b/public/images/emoji/purple_heart.png differ diff --git a/public/images/emoji/question.png b/public/images/emoji/question.png new file mode 100644 index 00000000..1c3edc0a Binary files /dev/null and b/public/images/emoji/question.png differ diff --git a/public/images/emoji/rabbit.png b/public/images/emoji/rabbit.png new file mode 100644 index 00000000..178f91dd Binary files /dev/null and b/public/images/emoji/rabbit.png differ diff --git a/public/images/emoji/racehorse.png b/public/images/emoji/racehorse.png new file mode 100644 index 00000000..e3267946 Binary files /dev/null and b/public/images/emoji/racehorse.png differ diff --git a/public/images/emoji/radio.png b/public/images/emoji/radio.png new file mode 100644 index 00000000..e377db2c Binary files /dev/null and b/public/images/emoji/radio.png differ diff --git a/public/images/emoji/rage.png b/public/images/emoji/rage.png new file mode 100644 index 00000000..cdd8858c Binary files /dev/null and b/public/images/emoji/rage.png differ diff --git a/public/images/emoji/rage1.png b/public/images/emoji/rage1.png new file mode 100644 index 00000000..d4d84679 Binary files /dev/null and b/public/images/emoji/rage1.png differ diff --git a/public/images/emoji/rage2.png b/public/images/emoji/rage2.png new file mode 100644 index 00000000..0cd7052c Binary files /dev/null and b/public/images/emoji/rage2.png differ diff --git a/public/images/emoji/rage3.png b/public/images/emoji/rage3.png new file mode 100644 index 00000000..340ad870 Binary files /dev/null and b/public/images/emoji/rage3.png differ diff --git a/public/images/emoji/rage4.png b/public/images/emoji/rage4.png new file mode 100644 index 00000000..6e6c1238 Binary files /dev/null and b/public/images/emoji/rage4.png differ diff --git a/public/images/emoji/rainbow.png b/public/images/emoji/rainbow.png new file mode 100644 index 00000000..4b150bd5 Binary files /dev/null and b/public/images/emoji/rainbow.png differ diff --git a/public/images/emoji/raised_hands.png b/public/images/emoji/raised_hands.png new file mode 100644 index 00000000..f9f2a95f Binary files /dev/null and b/public/images/emoji/raised_hands.png differ diff --git a/public/images/emoji/ramen.png b/public/images/emoji/ramen.png new file mode 100644 index 00000000..c6524f3e Binary files /dev/null and b/public/images/emoji/ramen.png differ diff --git a/public/images/emoji/red_car.png b/public/images/emoji/red_car.png new file mode 100644 index 00000000..c8bc8020 Binary files /dev/null and b/public/images/emoji/red_car.png differ diff --git a/public/images/emoji/red_circle.png b/public/images/emoji/red_circle.png new file mode 100644 index 00000000..ef13dc4a Binary files /dev/null and b/public/images/emoji/red_circle.png differ diff --git a/public/images/emoji/registered.png b/public/images/emoji/registered.png new file mode 100644 index 00000000..dcecc555 Binary files /dev/null and b/public/images/emoji/registered.png differ diff --git a/public/images/emoji/relaxed.png b/public/images/emoji/relaxed.png new file mode 100644 index 00000000..4b8412cd Binary files /dev/null and b/public/images/emoji/relaxed.png differ diff --git a/public/images/emoji/relieved.png b/public/images/emoji/relieved.png new file mode 100644 index 00000000..e9405da0 Binary files /dev/null and b/public/images/emoji/relieved.png differ diff --git a/public/images/emoji/restroom.png b/public/images/emoji/restroom.png new file mode 100644 index 00000000..612eccda Binary files /dev/null and b/public/images/emoji/restroom.png differ diff --git a/public/images/emoji/rewind.png b/public/images/emoji/rewind.png new file mode 100644 index 00000000..3997771b Binary files /dev/null and b/public/images/emoji/rewind.png differ diff --git a/public/images/emoji/ribbon.png b/public/images/emoji/ribbon.png new file mode 100644 index 00000000..b7281b0f Binary files /dev/null and b/public/images/emoji/ribbon.png differ diff --git a/public/images/emoji/rice.png b/public/images/emoji/rice.png new file mode 100644 index 00000000..13ce2747 Binary files /dev/null and b/public/images/emoji/rice.png differ diff --git a/public/images/emoji/rice_ball.png b/public/images/emoji/rice_ball.png new file mode 100644 index 00000000..084660ef Binary files /dev/null and b/public/images/emoji/rice_ball.png differ diff --git a/public/images/emoji/rice_cracker.png b/public/images/emoji/rice_cracker.png new file mode 100644 index 00000000..3f7cbffc Binary files /dev/null and b/public/images/emoji/rice_cracker.png differ diff --git a/public/images/emoji/rice_scene.png b/public/images/emoji/rice_scene.png new file mode 100644 index 00000000..ce41fe81 Binary files /dev/null and b/public/images/emoji/rice_scene.png differ diff --git a/public/images/emoji/ring.png b/public/images/emoji/ring.png new file mode 100644 index 00000000..0fd547aa Binary files /dev/null and b/public/images/emoji/ring.png differ diff --git a/public/images/emoji/rocket.png b/public/images/emoji/rocket.png new file mode 100644 index 00000000..4b52a2e6 Binary files /dev/null and b/public/images/emoji/rocket.png differ diff --git a/public/images/emoji/roller_coaster.png b/public/images/emoji/roller_coaster.png new file mode 100644 index 00000000..d33d7c54 Binary files /dev/null and b/public/images/emoji/roller_coaster.png differ diff --git a/public/images/emoji/rose.png b/public/images/emoji/rose.png new file mode 100644 index 00000000..d28df9eb Binary files /dev/null and b/public/images/emoji/rose.png differ diff --git a/public/images/emoji/ru.png b/public/images/emoji/ru.png new file mode 100644 index 00000000..1fefb2ca Binary files /dev/null and b/public/images/emoji/ru.png differ diff --git a/public/images/emoji/runner.png b/public/images/emoji/runner.png new file mode 100644 index 00000000..a2c78f55 Binary files /dev/null and b/public/images/emoji/runner.png differ diff --git a/public/images/emoji/sa.png b/public/images/emoji/sa.png new file mode 100644 index 00000000..82a27c7a Binary files /dev/null and b/public/images/emoji/sa.png differ diff --git a/public/images/emoji/sagittarius.png b/public/images/emoji/sagittarius.png new file mode 100644 index 00000000..8c14a431 Binary files /dev/null and b/public/images/emoji/sagittarius.png differ diff --git a/public/images/emoji/sailboat.png b/public/images/emoji/sailboat.png new file mode 100644 index 00000000..8084f0e5 Binary files /dev/null and b/public/images/emoji/sailboat.png differ diff --git a/public/images/emoji/sake.png b/public/images/emoji/sake.png new file mode 100644 index 00000000..ce544d72 Binary files /dev/null and b/public/images/emoji/sake.png differ diff --git a/public/images/emoji/sandal.png b/public/images/emoji/sandal.png new file mode 100644 index 00000000..4f740a33 Binary files /dev/null and b/public/images/emoji/sandal.png differ diff --git a/public/images/emoji/santa.png b/public/images/emoji/santa.png new file mode 100644 index 00000000..c753675e Binary files /dev/null and b/public/images/emoji/santa.png differ diff --git a/public/images/emoji/satellite.png b/public/images/emoji/satellite.png new file mode 100644 index 00000000..d3f07107 Binary files /dev/null and b/public/images/emoji/satellite.png differ diff --git a/public/images/emoji/satisfied.png b/public/images/emoji/satisfied.png new file mode 100644 index 00000000..f68006dd Binary files /dev/null and b/public/images/emoji/satisfied.png differ diff --git a/public/images/emoji/saxophone.png b/public/images/emoji/saxophone.png new file mode 100644 index 00000000..ac27b0de Binary files /dev/null and b/public/images/emoji/saxophone.png differ diff --git a/public/images/emoji/school.png b/public/images/emoji/school.png new file mode 100644 index 00000000..bdc0fa00 Binary files /dev/null and b/public/images/emoji/school.png differ diff --git a/public/images/emoji/school_satchel.png b/public/images/emoji/school_satchel.png new file mode 100644 index 00000000..ba7925e4 Binary files /dev/null and b/public/images/emoji/school_satchel.png differ diff --git a/public/images/emoji/scissors.png b/public/images/emoji/scissors.png new file mode 100644 index 00000000..77b38148 Binary files /dev/null and b/public/images/emoji/scissors.png differ diff --git a/public/images/emoji/scorpius.png b/public/images/emoji/scorpius.png new file mode 100644 index 00000000..69734fa0 Binary files /dev/null and b/public/images/emoji/scorpius.png differ diff --git a/public/images/emoji/scream.png b/public/images/emoji/scream.png new file mode 100644 index 00000000..222aae8d Binary files /dev/null and b/public/images/emoji/scream.png differ diff --git a/public/images/emoji/seat.png b/public/images/emoji/seat.png new file mode 100644 index 00000000..9d7311a8 Binary files /dev/null and b/public/images/emoji/seat.png differ diff --git a/public/images/emoji/secret.png b/public/images/emoji/secret.png new file mode 100644 index 00000000..26b63912 Binary files /dev/null and b/public/images/emoji/secret.png differ diff --git a/public/images/emoji/shaved_ice.png b/public/images/emoji/shaved_ice.png new file mode 100644 index 00000000..a8f6833b Binary files /dev/null and b/public/images/emoji/shaved_ice.png differ diff --git a/public/images/emoji/sheep.png b/public/images/emoji/sheep.png new file mode 100644 index 00000000..7ca93eaf Binary files /dev/null and b/public/images/emoji/sheep.png differ diff --git a/public/images/emoji/shell.png b/public/images/emoji/shell.png new file mode 100644 index 00000000..d2892f08 Binary files /dev/null and b/public/images/emoji/shell.png differ diff --git a/public/images/emoji/ship.png b/public/images/emoji/ship.png new file mode 100644 index 00000000..7b709089 Binary files /dev/null and b/public/images/emoji/ship.png differ diff --git a/public/images/emoji/shipit.png b/public/images/emoji/shipit.png new file mode 100644 index 00000000..5097004b Binary files /dev/null and b/public/images/emoji/shipit.png differ diff --git a/public/images/emoji/shirt.png b/public/images/emoji/shirt.png new file mode 100644 index 00000000..591b55bf Binary files /dev/null and b/public/images/emoji/shirt.png differ diff --git a/public/images/emoji/shit.png b/public/images/emoji/shit.png new file mode 100644 index 00000000..69bc33f1 Binary files /dev/null and b/public/images/emoji/shit.png differ diff --git a/public/images/emoji/shoe.png b/public/images/emoji/shoe.png new file mode 100644 index 00000000..3771bfb6 Binary files /dev/null and b/public/images/emoji/shoe.png differ diff --git a/public/images/emoji/signal_strength.png b/public/images/emoji/signal_strength.png new file mode 100644 index 00000000..05d422c1 Binary files /dev/null and b/public/images/emoji/signal_strength.png differ diff --git a/public/images/emoji/six_pointed_star.png b/public/images/emoji/six_pointed_star.png new file mode 100644 index 00000000..28e49230 Binary files /dev/null and b/public/images/emoji/six_pointed_star.png differ diff --git a/public/images/emoji/ski.png b/public/images/emoji/ski.png new file mode 100644 index 00000000..e8d54f58 Binary files /dev/null and b/public/images/emoji/ski.png differ diff --git a/public/images/emoji/skull.png b/public/images/emoji/skull.png new file mode 100644 index 00000000..d29156dc Binary files /dev/null and b/public/images/emoji/skull.png differ diff --git a/public/images/emoji/sleepy.png b/public/images/emoji/sleepy.png new file mode 100644 index 00000000..e607a0ca Binary files /dev/null and b/public/images/emoji/sleepy.png differ diff --git a/public/images/emoji/slot_machine.png b/public/images/emoji/slot_machine.png new file mode 100644 index 00000000..7a98d229 Binary files /dev/null and b/public/images/emoji/slot_machine.png differ diff --git a/public/images/emoji/smile.png b/public/images/emoji/smile.png new file mode 100644 index 00000000..636390ec Binary files /dev/null and b/public/images/emoji/smile.png differ diff --git a/public/images/emoji/smiley.png b/public/images/emoji/smiley.png new file mode 100644 index 00000000..6c4ef119 Binary files /dev/null and b/public/images/emoji/smiley.png differ diff --git a/public/images/emoji/smirk.png b/public/images/emoji/smirk.png new file mode 100644 index 00000000..57a69306 Binary files /dev/null and b/public/images/emoji/smirk.png differ diff --git a/public/images/emoji/smoking.png b/public/images/emoji/smoking.png new file mode 100644 index 00000000..c7c39a12 Binary files /dev/null and b/public/images/emoji/smoking.png differ diff --git a/public/images/emoji/snake.png b/public/images/emoji/snake.png new file mode 100644 index 00000000..b8e2e241 Binary files /dev/null and b/public/images/emoji/snake.png differ diff --git a/public/images/emoji/snowman.png b/public/images/emoji/snowman.png new file mode 100644 index 00000000..0daf91c1 Binary files /dev/null and b/public/images/emoji/snowman.png differ diff --git a/public/images/emoji/sob.png b/public/images/emoji/sob.png new file mode 100644 index 00000000..079a944f Binary files /dev/null and b/public/images/emoji/sob.png differ diff --git a/public/images/emoji/soccer.png b/public/images/emoji/soccer.png new file mode 100644 index 00000000..fe4a6759 Binary files /dev/null and b/public/images/emoji/soccer.png differ diff --git a/public/images/emoji/space_invader.png b/public/images/emoji/space_invader.png new file mode 100644 index 00000000..3c7804c7 Binary files /dev/null and b/public/images/emoji/space_invader.png differ diff --git a/public/images/emoji/spades.png b/public/images/emoji/spades.png new file mode 100644 index 00000000..17084df6 Binary files /dev/null and b/public/images/emoji/spades.png differ diff --git a/public/images/emoji/spaghetti.png b/public/images/emoji/spaghetti.png new file mode 100644 index 00000000..8aec1011 Binary files /dev/null and b/public/images/emoji/spaghetti.png differ diff --git a/public/images/emoji/sparkler.png b/public/images/emoji/sparkler.png new file mode 100644 index 00000000..306e0c59 Binary files /dev/null and b/public/images/emoji/sparkler.png differ diff --git a/public/images/emoji/sparkles.png b/public/images/emoji/sparkles.png new file mode 100644 index 00000000..db6afa96 Binary files /dev/null and b/public/images/emoji/sparkles.png differ diff --git a/public/images/emoji/speaker.png b/public/images/emoji/speaker.png new file mode 100644 index 00000000..ad245cfe Binary files /dev/null and b/public/images/emoji/speaker.png differ diff --git a/public/images/emoji/speedboat.png b/public/images/emoji/speedboat.png new file mode 100644 index 00000000..9af4c3ba Binary files /dev/null and b/public/images/emoji/speedboat.png differ diff --git a/public/images/emoji/squirrel.png b/public/images/emoji/squirrel.png new file mode 100644 index 00000000..5097004b Binary files /dev/null and b/public/images/emoji/squirrel.png differ diff --git a/public/images/emoji/star.png b/public/images/emoji/star.png new file mode 100644 index 00000000..7ca7067b Binary files /dev/null and b/public/images/emoji/star.png differ diff --git a/public/images/emoji/star2.png b/public/images/emoji/star2.png new file mode 100644 index 00000000..94f9ceb4 Binary files /dev/null and b/public/images/emoji/star2.png differ diff --git a/public/images/emoji/stars.png b/public/images/emoji/stars.png new file mode 100644 index 00000000..3c9c684c Binary files /dev/null and b/public/images/emoji/stars.png differ diff --git a/public/images/emoji/station.png b/public/images/emoji/station.png new file mode 100644 index 00000000..70fdf630 Binary files /dev/null and b/public/images/emoji/station.png differ diff --git a/public/images/emoji/statue_of_liberty.png b/public/images/emoji/statue_of_liberty.png new file mode 100644 index 00000000..a5212907 Binary files /dev/null and b/public/images/emoji/statue_of_liberty.png differ diff --git a/public/images/emoji/stew.png b/public/images/emoji/stew.png new file mode 100644 index 00000000..7168767d Binary files /dev/null and b/public/images/emoji/stew.png differ diff --git a/public/images/emoji/strawberry.png b/public/images/emoji/strawberry.png new file mode 100644 index 00000000..ac74fb83 Binary files /dev/null and b/public/images/emoji/strawberry.png differ diff --git a/public/images/emoji/sunflower.png b/public/images/emoji/sunflower.png new file mode 100644 index 00000000..9eae979e Binary files /dev/null and b/public/images/emoji/sunflower.png differ diff --git a/public/images/emoji/sunny.png b/public/images/emoji/sunny.png new file mode 100644 index 00000000..81a412dd Binary files /dev/null and b/public/images/emoji/sunny.png differ diff --git a/public/images/emoji/sunrise.png b/public/images/emoji/sunrise.png new file mode 100644 index 00000000..4822140b Binary files /dev/null and b/public/images/emoji/sunrise.png differ diff --git a/public/images/emoji/sunrise_over_mountains.png b/public/images/emoji/sunrise_over_mountains.png new file mode 100644 index 00000000..ea3fa19a Binary files /dev/null and b/public/images/emoji/sunrise_over_mountains.png differ diff --git a/public/images/emoji/surfer.png b/public/images/emoji/surfer.png new file mode 100644 index 00000000..27248dc6 Binary files /dev/null and b/public/images/emoji/surfer.png differ diff --git a/public/images/emoji/sushi.png b/public/images/emoji/sushi.png new file mode 100644 index 00000000..135e3633 Binary files /dev/null and b/public/images/emoji/sushi.png differ diff --git a/public/images/emoji/suspect.png b/public/images/emoji/suspect.png new file mode 100644 index 00000000..d96e0bc7 Binary files /dev/null and b/public/images/emoji/suspect.png differ diff --git a/public/images/emoji/sweat.png b/public/images/emoji/sweat.png new file mode 100644 index 00000000..d7179708 Binary files /dev/null and b/public/images/emoji/sweat.png differ diff --git a/public/images/emoji/sweat_drops.png b/public/images/emoji/sweat_drops.png new file mode 100644 index 00000000..2c4ac5c6 Binary files /dev/null and b/public/images/emoji/sweat_drops.png differ diff --git a/public/images/emoji/swimmer.png b/public/images/emoji/swimmer.png new file mode 100644 index 00000000..d384f95c Binary files /dev/null and b/public/images/emoji/swimmer.png differ diff --git a/public/images/emoji/syringe.png b/public/images/emoji/syringe.png new file mode 100644 index 00000000..c066625d Binary files /dev/null and b/public/images/emoji/syringe.png differ diff --git a/public/images/emoji/tada.png b/public/images/emoji/tada.png new file mode 100644 index 00000000..78c674fd Binary files /dev/null and b/public/images/emoji/tada.png differ diff --git a/public/images/emoji/tangerine.png b/public/images/emoji/tangerine.png new file mode 100644 index 00000000..ad2f3d48 Binary files /dev/null and b/public/images/emoji/tangerine.png differ diff --git a/public/images/emoji/taurus.png b/public/images/emoji/taurus.png new file mode 100644 index 00000000..86bbf864 Binary files /dev/null and b/public/images/emoji/taurus.png differ diff --git a/public/images/emoji/taxi.png b/public/images/emoji/taxi.png new file mode 100644 index 00000000..0e74be12 Binary files /dev/null and b/public/images/emoji/taxi.png differ diff --git a/public/images/emoji/tea.png b/public/images/emoji/tea.png new file mode 100644 index 00000000..a323e485 Binary files /dev/null and b/public/images/emoji/tea.png differ diff --git a/public/images/emoji/telephone.png b/public/images/emoji/telephone.png new file mode 100644 index 00000000..e1d64368 Binary files /dev/null and b/public/images/emoji/telephone.png differ diff --git a/public/images/emoji/tennis.png b/public/images/emoji/tennis.png new file mode 100644 index 00000000..18559da3 Binary files /dev/null and b/public/images/emoji/tennis.png differ diff --git a/public/images/emoji/tent.png b/public/images/emoji/tent.png new file mode 100644 index 00000000..452aebda Binary files /dev/null and b/public/images/emoji/tent.png differ diff --git a/public/images/emoji/thumbsdown.png b/public/images/emoji/thumbsdown.png new file mode 100644 index 00000000..6f757ba8 Binary files /dev/null and b/public/images/emoji/thumbsdown.png differ diff --git a/public/images/emoji/thumbsup.png b/public/images/emoji/thumbsup.png new file mode 100644 index 00000000..4dae7a09 Binary files /dev/null and b/public/images/emoji/thumbsup.png differ diff --git a/public/images/emoji/ticket.png b/public/images/emoji/ticket.png new file mode 100644 index 00000000..c926699b Binary files /dev/null and b/public/images/emoji/ticket.png differ diff --git a/public/images/emoji/tiger.png b/public/images/emoji/tiger.png new file mode 100644 index 00000000..1f44a975 Binary files /dev/null and b/public/images/emoji/tiger.png differ diff --git a/public/images/emoji/tm.png b/public/images/emoji/tm.png new file mode 100644 index 00000000..202ec305 Binary files /dev/null and b/public/images/emoji/tm.png differ diff --git a/public/images/emoji/toilet.png b/public/images/emoji/toilet.png new file mode 100644 index 00000000..18147e6d Binary files /dev/null and b/public/images/emoji/toilet.png differ diff --git a/public/images/emoji/tokyo_tower.png b/public/images/emoji/tokyo_tower.png new file mode 100644 index 00000000..b2712ac9 Binary files /dev/null and b/public/images/emoji/tokyo_tower.png differ diff --git a/public/images/emoji/tomato.png b/public/images/emoji/tomato.png new file mode 100644 index 00000000..b2f14ece Binary files /dev/null and b/public/images/emoji/tomato.png differ diff --git a/public/images/emoji/tongue.png b/public/images/emoji/tongue.png new file mode 100644 index 00000000..1b76e224 Binary files /dev/null and b/public/images/emoji/tongue.png differ diff --git a/public/images/emoji/top.png b/public/images/emoji/top.png new file mode 100644 index 00000000..3a4f2cd1 Binary files /dev/null and b/public/images/emoji/top.png differ diff --git a/public/images/emoji/tophat.png b/public/images/emoji/tophat.png new file mode 100644 index 00000000..f12f2321 Binary files /dev/null and b/public/images/emoji/tophat.png differ diff --git a/public/images/emoji/traffic_light.png b/public/images/emoji/traffic_light.png new file mode 100644 index 00000000..c15a6442 Binary files /dev/null and b/public/images/emoji/traffic_light.png differ diff --git a/public/images/emoji/train.png b/public/images/emoji/train.png new file mode 100644 index 00000000..26288046 Binary files /dev/null and b/public/images/emoji/train.png differ diff --git a/public/images/emoji/trident.png b/public/images/emoji/trident.png new file mode 100644 index 00000000..900a5a4d Binary files /dev/null and b/public/images/emoji/trident.png differ diff --git a/public/images/emoji/trophy.png b/public/images/emoji/trophy.png new file mode 100644 index 00000000..39177993 Binary files /dev/null and b/public/images/emoji/trophy.png differ diff --git a/public/images/emoji/tropical_fish.png b/public/images/emoji/tropical_fish.png new file mode 100644 index 00000000..fcaefe85 Binary files /dev/null and b/public/images/emoji/tropical_fish.png differ diff --git a/public/images/emoji/truck.png b/public/images/emoji/truck.png new file mode 100644 index 00000000..d346efd0 Binary files /dev/null and b/public/images/emoji/truck.png differ diff --git a/public/images/emoji/trumpet.png b/public/images/emoji/trumpet.png new file mode 100644 index 00000000..e98f5b76 Binary files /dev/null and b/public/images/emoji/trumpet.png differ diff --git a/public/images/emoji/tshirt.png b/public/images/emoji/tshirt.png new file mode 100644 index 00000000..591b55bf Binary files /dev/null and b/public/images/emoji/tshirt.png differ diff --git a/public/images/emoji/tulip.png b/public/images/emoji/tulip.png new file mode 100644 index 00000000..1f20c543 Binary files /dev/null and b/public/images/emoji/tulip.png differ diff --git a/public/images/emoji/tv.png b/public/images/emoji/tv.png new file mode 100644 index 00000000..90b80974 Binary files /dev/null and b/public/images/emoji/tv.png differ diff --git a/public/images/emoji/u5272.png b/public/images/emoji/u5272.png new file mode 100644 index 00000000..6ce43a06 Binary files /dev/null and b/public/images/emoji/u5272.png differ diff --git a/public/images/emoji/u55b6.png b/public/images/emoji/u55b6.png new file mode 100644 index 00000000..d10e0764 Binary files /dev/null and b/public/images/emoji/u55b6.png differ diff --git a/public/images/emoji/u6307.png b/public/images/emoji/u6307.png new file mode 100644 index 00000000..d185ca7a Binary files /dev/null and b/public/images/emoji/u6307.png differ diff --git a/public/images/emoji/u6708.png b/public/images/emoji/u6708.png new file mode 100644 index 00000000..ab493e4f Binary files /dev/null and b/public/images/emoji/u6708.png differ diff --git a/public/images/emoji/u6709.png b/public/images/emoji/u6709.png new file mode 100644 index 00000000..0287b16a Binary files /dev/null and b/public/images/emoji/u6709.png differ diff --git a/public/images/emoji/u6e80.png b/public/images/emoji/u6e80.png new file mode 100644 index 00000000..90dd116d Binary files /dev/null and b/public/images/emoji/u6e80.png differ diff --git a/public/images/emoji/u7121.png b/public/images/emoji/u7121.png new file mode 100644 index 00000000..9ff16c51 Binary files /dev/null and b/public/images/emoji/u7121.png differ diff --git a/public/images/emoji/u7533.png b/public/images/emoji/u7533.png new file mode 100644 index 00000000..7efbd9d8 Binary files /dev/null and b/public/images/emoji/u7533.png differ diff --git a/public/images/emoji/u7a7a.png b/public/images/emoji/u7a7a.png new file mode 100644 index 00000000..eb9774e1 Binary files /dev/null and b/public/images/emoji/u7a7a.png differ diff --git a/public/images/emoji/umbrella.png b/public/images/emoji/umbrella.png new file mode 100644 index 00000000..a6d3890e Binary files /dev/null and b/public/images/emoji/umbrella.png differ diff --git a/public/images/emoji/unamused.png b/public/images/emoji/unamused.png new file mode 100644 index 00000000..234c9c08 Binary files /dev/null and b/public/images/emoji/unamused.png differ diff --git a/public/images/emoji/underage.png b/public/images/emoji/underage.png new file mode 100644 index 00000000..ae3a771d Binary files /dev/null and b/public/images/emoji/underage.png differ diff --git a/public/images/emoji/unlock.png b/public/images/emoji/unlock.png new file mode 100644 index 00000000..b664853f Binary files /dev/null and b/public/images/emoji/unlock.png differ diff --git a/public/images/emoji/up.png b/public/images/emoji/up.png new file mode 100644 index 00000000..b065186e Binary files /dev/null and b/public/images/emoji/up.png differ diff --git a/public/images/emoji/us.png b/public/images/emoji/us.png new file mode 100644 index 00000000..97323c7d Binary files /dev/null and b/public/images/emoji/us.png differ diff --git a/public/images/emoji/v.png b/public/images/emoji/v.png new file mode 100644 index 00000000..e9cc8dc8 Binary files /dev/null and b/public/images/emoji/v.png differ diff --git a/public/images/emoji/vhs.png b/public/images/emoji/vhs.png new file mode 100644 index 00000000..34027fb2 Binary files /dev/null and b/public/images/emoji/vhs.png differ diff --git a/public/images/emoji/vibration_mode.png b/public/images/emoji/vibration_mode.png new file mode 100644 index 00000000..7d9b811b Binary files /dev/null and b/public/images/emoji/vibration_mode.png differ diff --git a/public/images/emoji/virgo.png b/public/images/emoji/virgo.png new file mode 100644 index 00000000..37219d75 Binary files /dev/null and b/public/images/emoji/virgo.png differ diff --git a/public/images/emoji/vs.png b/public/images/emoji/vs.png new file mode 100644 index 00000000..da838c3f Binary files /dev/null and b/public/images/emoji/vs.png differ diff --git a/public/images/emoji/walking.png b/public/images/emoji/walking.png new file mode 100644 index 00000000..4c7501fa Binary files /dev/null and b/public/images/emoji/walking.png differ diff --git a/public/images/emoji/warning.png b/public/images/emoji/warning.png new file mode 100644 index 00000000..d2de14ce Binary files /dev/null and b/public/images/emoji/warning.png differ diff --git a/public/images/emoji/watermelon.png b/public/images/emoji/watermelon.png new file mode 100644 index 00000000..af8e3aca Binary files /dev/null and b/public/images/emoji/watermelon.png differ diff --git a/public/images/emoji/wave.png b/public/images/emoji/wave.png new file mode 100644 index 00000000..17641964 Binary files /dev/null and b/public/images/emoji/wave.png differ diff --git a/public/images/emoji/wc.png b/public/images/emoji/wc.png new file mode 100644 index 00000000..27125f19 Binary files /dev/null and b/public/images/emoji/wc.png differ diff --git a/public/images/emoji/wedding.png b/public/images/emoji/wedding.png new file mode 100644 index 00000000..75bbf800 Binary files /dev/null and b/public/images/emoji/wedding.png differ diff --git a/public/images/emoji/whale.png b/public/images/emoji/whale.png new file mode 100644 index 00000000..43b319a7 Binary files /dev/null and b/public/images/emoji/whale.png differ diff --git a/public/images/emoji/wheelchair.png b/public/images/emoji/wheelchair.png new file mode 100644 index 00000000..6d53c499 Binary files /dev/null and b/public/images/emoji/wheelchair.png differ diff --git a/public/images/emoji/white_square.png b/public/images/emoji/white_square.png new file mode 100644 index 00000000..65b56745 Binary files /dev/null and b/public/images/emoji/white_square.png differ diff --git a/public/images/emoji/wind_chime.png b/public/images/emoji/wind_chime.png new file mode 100644 index 00000000..5de30d7f Binary files /dev/null and b/public/images/emoji/wind_chime.png differ diff --git a/public/images/emoji/wink.png b/public/images/emoji/wink.png new file mode 100644 index 00000000..9d593b88 Binary files /dev/null and b/public/images/emoji/wink.png differ diff --git a/public/images/emoji/wink2.png b/public/images/emoji/wink2.png new file mode 100644 index 00000000..3d1b442a Binary files /dev/null and b/public/images/emoji/wink2.png differ diff --git a/public/images/emoji/wolf.png b/public/images/emoji/wolf.png new file mode 100644 index 00000000..f1969e6b Binary files /dev/null and b/public/images/emoji/wolf.png differ diff --git a/public/images/emoji/woman.png b/public/images/emoji/woman.png new file mode 100644 index 00000000..b052f4fa Binary files /dev/null and b/public/images/emoji/woman.png differ diff --git a/public/images/emoji/womans_hat.png b/public/images/emoji/womans_hat.png new file mode 100644 index 00000000..0afbe823 Binary files /dev/null and b/public/images/emoji/womans_hat.png differ diff --git a/public/images/emoji/womens.png b/public/images/emoji/womens.png new file mode 100644 index 00000000..83deabfa Binary files /dev/null and b/public/images/emoji/womens.png differ diff --git a/public/images/emoji/x.png b/public/images/emoji/x.png new file mode 100644 index 00000000..a2b46bfc Binary files /dev/null and b/public/images/emoji/x.png differ diff --git a/public/images/emoji/yellow_heart.png b/public/images/emoji/yellow_heart.png new file mode 100644 index 00000000..409cc176 Binary files /dev/null and b/public/images/emoji/yellow_heart.png differ diff --git a/public/images/emoji/zap.png b/public/images/emoji/zap.png new file mode 100644 index 00000000..d3dd89f6 Binary files /dev/null and b/public/images/emoji/zap.png differ diff --git a/public/images/emoji/zzz.png b/public/images/emoji/zzz.png new file mode 100644 index 00000000..55e31ae1 Binary files /dev/null and b/public/images/emoji/zzz.png differ diff --git a/public/images/facebox/closelabel.png b/public/images/facebox/closelabel.png new file mode 100644 index 00000000..c339e593 Binary files /dev/null and b/public/images/facebox/closelabel.png differ diff --git a/public/images/facebox/loading.gif b/public/images/facebox/loading.gif new file mode 100644 index 00000000..f864d5fd Binary files /dev/null and b/public/images/facebox/loading.gif differ diff --git a/public/images/icons/add.png b/public/images/icons/add.png new file mode 100644 index 00000000..e2b66ea9 Binary files /dev/null and b/public/images/icons/add.png differ diff --git a/public/images/icons/construction.png b/public/images/icons/construction.png new file mode 100644 index 00000000..066a34c5 Binary files /dev/null and b/public/images/icons/construction.png differ diff --git a/public/images/icons/github-admin.png b/public/images/icons/github-admin.png new file mode 100644 index 00000000..548a56e0 Binary files /dev/null and b/public/images/icons/github-admin.png differ diff --git a/public/images/icons/github-forks.png b/public/images/icons/github-forks.png new file mode 100644 index 00000000..04d17ca8 Binary files /dev/null and b/public/images/icons/github-forks.png differ diff --git a/public/images/icons/github-watchers.png b/public/images/icons/github-watchers.png new file mode 100644 index 00000000..9dd04891 Binary files /dev/null and b/public/images/icons/github-watchers.png differ diff --git a/public/images/icons/help.png b/public/images/icons/help.png new file mode 100644 index 00000000..5c870176 Binary files /dev/null and b/public/images/icons/help.png differ diff --git a/public/images/icons/log.fold.closed.2.png b/public/images/icons/log.fold.closed.2.png new file mode 100644 index 00000000..a1a8765c Binary files /dev/null and b/public/images/icons/log.fold.closed.2.png differ diff --git a/public/images/icons/log.fold.closed.png b/public/images/icons/log.fold.closed.png new file mode 100644 index 00000000..42a2700c Binary files /dev/null and b/public/images/icons/log.fold.closed.png differ diff --git a/public/images/icons/log.fold.open.2.png b/public/images/icons/log.fold.open.2.png new file mode 100644 index 00000000..fc18158c Binary files /dev/null and b/public/images/icons/log.fold.open.2.png differ diff --git a/public/images/icons/log.fold.open.png b/public/images/icons/log.fold.open.png new file mode 100644 index 00000000..184c862f Binary files /dev/null and b/public/images/icons/log.fold.open.png differ diff --git a/public/images/icons/search.png b/public/images/icons/search.png new file mode 100644 index 00000000..b928383e Binary files /dev/null and b/public/images/icons/search.png differ diff --git a/public/images/icons/smile.png b/public/images/icons/smile.png new file mode 100644 index 00000000..963a3dad Binary files /dev/null and b/public/images/icons/smile.png differ diff --git a/public/images/icons/status.green.png b/public/images/icons/status.green.png new file mode 100644 index 00000000..bc6aa8fe Binary files /dev/null and b/public/images/icons/status.green.png differ diff --git a/public/images/icons/status.red.png b/public/images/icons/status.red.png new file mode 100644 index 00000000..bdb6d63c Binary files /dev/null and b/public/images/icons/status.red.png differ diff --git a/public/images/icons/status.square.gray.png b/public/images/icons/status.square.gray.png new file mode 100644 index 00000000..bf2f9cea Binary files /dev/null and b/public/images/icons/status.square.gray.png differ diff --git a/public/images/icons/status.square.green.png b/public/images/icons/status.square.green.png new file mode 100644 index 00000000..0b9489eb Binary files /dev/null and b/public/images/icons/status.square.green.png differ diff --git a/public/images/icons/status.square.red.png b/public/images/icons/status.square.red.png new file mode 100644 index 00000000..c9e6ec9a Binary files /dev/null and b/public/images/icons/status.square.red.png differ diff --git a/public/images/icons/status.square.yellow.png b/public/images/icons/status.square.yellow.png new file mode 100644 index 00000000..d0250312 Binary files /dev/null and b/public/images/icons/status.square.yellow.png differ diff --git a/public/images/icons/status.yellow.png b/public/images/icons/status.yellow.png new file mode 100644 index 00000000..0f6d5b3a Binary files /dev/null and b/public/images/icons/status.yellow.png differ diff --git a/public/images/icons/tools-button.png b/public/images/icons/tools-button.png new file mode 100644 index 00000000..75f0c900 Binary files /dev/null and b/public/images/icons/tools-button.png differ diff --git a/public/images/icons/wrench.png b/public/images/icons/wrench.png new file mode 100644 index 00000000..cd572126 Binary files /dev/null and b/public/images/icons/wrench.png differ diff --git a/public/images/layout/background-left.png b/public/images/layout/background-left.png new file mode 100644 index 00000000..2736ceb0 Binary files /dev/null and b/public/images/layout/background-left.png differ diff --git a/public/images/layout/current-repository-indicator-even.png b/public/images/layout/current-repository-indicator-even.png new file mode 100644 index 00000000..3f239692 Binary files /dev/null and b/public/images/layout/current-repository-indicator-even.png differ diff --git a/public/images/layout/current-repository-indicator-odd.png b/public/images/layout/current-repository-indicator-odd.png new file mode 100644 index 00000000..3d45ecda Binary files /dev/null and b/public/images/layout/current-repository-indicator-odd.png differ diff --git a/public/images/layout/logo.png b/public/images/layout/logo.png new file mode 100644 index 00000000..4edc8501 Binary files /dev/null and b/public/images/layout/logo.png differ diff --git a/public/images/spinner.gif b/public/images/spinner.gif new file mode 100644 index 00000000..e7eb4cb1 Binary files /dev/null and b/public/images/spinner.gif differ diff --git a/public/images/sponsors/5apps-205x60.png b/public/images/sponsors/5apps-205x60.png new file mode 100644 index 00000000..18b8d336 Binary files /dev/null and b/public/images/sponsors/5apps-205x60.png differ diff --git a/public/images/sponsors/8thlight-205x60.jpg b/public/images/sponsors/8thlight-205x60.jpg new file mode 100644 index 00000000..4783a5c2 Binary files /dev/null and b/public/images/sponsors/8thlight-205x60.jpg differ diff --git a/public/images/sponsors/agileanimal-205x60.png b/public/images/sponsors/agileanimal-205x60.png new file mode 100644 index 00000000..1c53f966 Binary files /dev/null and b/public/images/sponsors/agileanimal-205x60.png differ diff --git a/public/images/sponsors/amen-205x60.jpg b/public/images/sponsors/amen-205x60.jpg new file mode 100644 index 00000000..c2ed536c Binary files /dev/null and b/public/images/sponsors/amen-205x60.jpg differ diff --git a/public/images/sponsors/atomicobject-205x60.png b/public/images/sponsors/atomicobject-205x60.png new file mode 100644 index 00000000..62166365 Binary files /dev/null and b/public/images/sponsors/atomicobject-205x60.png differ diff --git a/public/images/sponsors/avarteq-140x40.png b/public/images/sponsors/avarteq-140x40.png new file mode 100644 index 00000000..e13e0143 Binary files /dev/null and b/public/images/sponsors/avarteq-140x40.png differ diff --git a/public/images/sponsors/basho-205x60.png b/public/images/sponsors/basho-205x60.png new file mode 100644 index 00000000..8d95c094 Binary files /dev/null and b/public/images/sponsors/basho-205x60.png differ diff --git a/public/images/sponsors/bendyworks-100x60.png b/public/images/sponsors/bendyworks-100x60.png new file mode 100644 index 00000000..9c98b7e7 Binary files /dev/null and b/public/images/sponsors/bendyworks-100x60.png differ diff --git a/public/images/sponsors/bendyworks-205x130.png b/public/images/sponsors/bendyworks-205x130.png new file mode 100644 index 00000000..c8654cd0 Binary files /dev/null and b/public/images/sponsors/bendyworks-205x130.png differ diff --git a/public/images/sponsors/bendyworks-210x210.png b/public/images/sponsors/bendyworks-210x210.png new file mode 100644 index 00000000..4ce673df Binary files /dev/null and b/public/images/sponsors/bendyworks-210x210.png differ diff --git a/public/images/sponsors/cloudcontrol-100x60.png b/public/images/sponsors/cloudcontrol-100x60.png new file mode 100644 index 00000000..ffb2e163 Binary files /dev/null and b/public/images/sponsors/cloudcontrol-100x60.png differ diff --git a/public/images/sponsors/cloudcontrol-205x130.png b/public/images/sponsors/cloudcontrol-205x130.png new file mode 100644 index 00000000..9f790453 Binary files /dev/null and b/public/images/sponsors/cloudcontrol-205x130.png differ diff --git a/public/images/sponsors/cloudcontrol-210x210.png b/public/images/sponsors/cloudcontrol-210x210.png new file mode 100644 index 00000000..11748a85 Binary files /dev/null and b/public/images/sponsors/cloudcontrol-210x210.png differ diff --git a/public/images/sponsors/cobotme-205x60.png b/public/images/sponsors/cobotme-205x60.png new file mode 100644 index 00000000..775485cd Binary files /dev/null and b/public/images/sponsors/cobotme-205x60.png differ diff --git a/public/images/sponsors/codeminer-205x60.png b/public/images/sponsors/codeminer-205x60.png new file mode 100644 index 00000000..f4b2caec Binary files /dev/null and b/public/images/sponsors/codeminer-205x60.png differ diff --git a/public/images/sponsors/crowdinteractive-205x60.png b/public/images/sponsors/crowdinteractive-205x60.png new file mode 100644 index 00000000..d4399390 Binary files /dev/null and b/public/images/sponsors/crowdinteractive-205x60.png differ diff --git a/public/images/sponsors/engineyard-140x40.png b/public/images/sponsors/engineyard-140x40.png new file mode 100644 index 00000000..46fec6bb Binary files /dev/null and b/public/images/sponsors/engineyard-140x40.png differ diff --git a/public/images/sponsors/enterprise-rails-140x40.png b/public/images/sponsors/enterprise-rails-140x40.png new file mode 100644 index 00000000..3f992209 Binary files /dev/null and b/public/images/sponsors/enterprise-rails-140x40.png differ diff --git a/public/images/sponsors/esm-205x60.png b/public/images/sponsors/esm-205x60.png new file mode 100644 index 00000000..d6c93c94 Binary files /dev/null and b/public/images/sponsors/esm-205x60.png differ diff --git a/public/images/sponsors/evilmartians-205x60.png b/public/images/sponsors/evilmartians-205x60.png new file mode 100644 index 00000000..0322fa27 Binary files /dev/null and b/public/images/sponsors/evilmartians-205x60.png differ diff --git a/public/images/sponsors/fingertips-205x60.png b/public/images/sponsors/fingertips-205x60.png new file mode 100644 index 00000000..f30e8164 Binary files /dev/null and b/public/images/sponsors/fingertips-205x60.png differ diff --git a/public/images/sponsors/gidsy.png b/public/images/sponsors/gidsy.png new file mode 100644 index 00000000..a1f7ca1b Binary files /dev/null and b/public/images/sponsors/gidsy.png differ diff --git a/public/images/sponsors/github.png b/public/images/sponsors/github.png new file mode 100644 index 00000000..224c946f Binary files /dev/null and b/public/images/sponsors/github.png differ diff --git a/public/images/sponsors/heroku-100x60.png b/public/images/sponsors/heroku-100x60.png new file mode 100644 index 00000000..a79e3a8d Binary files /dev/null and b/public/images/sponsors/heroku-100x60.png differ diff --git a/public/images/sponsors/heroku-140x40.png b/public/images/sponsors/heroku-140x40.png new file mode 100644 index 00000000..e104cd98 Binary files /dev/null and b/public/images/sponsors/heroku-140x40.png differ diff --git a/public/images/sponsors/heroku-205x130.png b/public/images/sponsors/heroku-205x130.png new file mode 100644 index 00000000..f540df48 Binary files /dev/null and b/public/images/sponsors/heroku-205x130.png differ diff --git a/public/images/sponsors/heroku-205x60.png b/public/images/sponsors/heroku-205x60.png new file mode 100644 index 00000000..b3e08851 Binary files /dev/null and b/public/images/sponsors/heroku-205x60.png differ diff --git a/public/images/sponsors/iriscouch-140x40.png b/public/images/sponsors/iriscouch-140x40.png new file mode 100644 index 00000000..345807ce Binary files /dev/null and b/public/images/sponsors/iriscouch-140x40.png differ diff --git a/public/images/sponsors/jumpstartlab-140x40.png b/public/images/sponsors/jumpstartlab-140x40.png new file mode 100644 index 00000000..cc097f2b Binary files /dev/null and b/public/images/sponsors/jumpstartlab-140x40.png differ diff --git a/public/images/sponsors/jumpstartlab-205x60.png b/public/images/sponsors/jumpstartlab-205x60.png new file mode 100644 index 00000000..463887ec Binary files /dev/null and b/public/images/sponsors/jumpstartlab-205x60.png differ diff --git a/public/images/sponsors/kanbanery-100x60.png b/public/images/sponsors/kanbanery-100x60.png new file mode 100644 index 00000000..8e986406 Binary files /dev/null and b/public/images/sponsors/kanbanery-100x60.png differ diff --git a/public/images/sponsors/kanbanery-205x130.png b/public/images/sponsors/kanbanery-205x130.png new file mode 100644 index 00000000..186d11d0 Binary files /dev/null and b/public/images/sponsors/kanbanery-205x130.png differ diff --git a/public/images/sponsors/kanbanery-205x60.png b/public/images/sponsors/kanbanery-205x60.png new file mode 100644 index 00000000..5a402e39 Binary files /dev/null and b/public/images/sponsors/kanbanery-205x60.png differ diff --git a/public/images/sponsors/librato-metrics-140x40.png b/public/images/sponsors/librato-metrics-140x40.png new file mode 100644 index 00000000..19be7adb Binary files /dev/null and b/public/images/sponsors/librato-metrics-140x40.png differ diff --git a/public/images/sponsors/medidata-205x60.png b/public/images/sponsors/medidata-205x60.png new file mode 100644 index 00000000..19e0db9f Binary files /dev/null and b/public/images/sponsors/medidata-205x60.png differ diff --git a/public/images/sponsors/meltmedia-205x60.png b/public/images/sponsors/meltmedia-205x60.png new file mode 100644 index 00000000..c7d65875 Binary files /dev/null and b/public/images/sponsors/meltmedia-205x60.png differ diff --git a/public/images/sponsors/mindmatters-205x60.png b/public/images/sponsors/mindmatters-205x60.png new file mode 100644 index 00000000..9edd7b9e Binary files /dev/null and b/public/images/sponsors/mindmatters-205x60.png differ diff --git a/public/images/sponsors/mongohq-100x60.png b/public/images/sponsors/mongohq-100x60.png new file mode 100644 index 00000000..1f50505d Binary files /dev/null and b/public/images/sponsors/mongohq-100x60.png differ diff --git a/public/images/sponsors/mongohq-205x130.png b/public/images/sponsors/mongohq-205x130.png new file mode 100644 index 00000000..6b431f17 Binary files /dev/null and b/public/images/sponsors/mongohq-205x130.png differ diff --git a/public/images/sponsors/mongohq-205x60.png b/public/images/sponsors/mongohq-205x60.png new file mode 100644 index 00000000..dfe04e5c Binary files /dev/null and b/public/images/sponsors/mongohq-205x60.png differ diff --git a/public/images/sponsors/nedap-100x60.png b/public/images/sponsors/nedap-100x60.png new file mode 100644 index 00000000..6aa9a9ee Binary files /dev/null and b/public/images/sponsors/nedap-100x60.png differ diff --git a/public/images/sponsors/nedap-205x130.png b/public/images/sponsors/nedap-205x130.png new file mode 100644 index 00000000..69294bf4 Binary files /dev/null and b/public/images/sponsors/nedap-205x130.png differ diff --git a/public/images/sponsors/nedap-205x60.png b/public/images/sponsors/nedap-205x60.png new file mode 100644 index 00000000..a9e2895c Binary files /dev/null and b/public/images/sponsors/nedap-205x60.png differ diff --git a/public/images/sponsors/nedap-430x130.png b/public/images/sponsors/nedap-430x130.png new file mode 100644 index 00000000..4423d1b3 Binary files /dev/null and b/public/images/sponsors/nedap-430x130.png differ diff --git a/public/images/sponsors/papertrail-140x40.png b/public/images/sponsors/papertrail-140x40.png new file mode 100644 index 00000000..4a55288c Binary files /dev/null and b/public/images/sponsors/papertrail-140x40.png differ diff --git a/public/images/sponsors/planio-100x60.png b/public/images/sponsors/planio-100x60.png new file mode 100644 index 00000000..8438d775 Binary files /dev/null and b/public/images/sponsors/planio-100x60.png differ diff --git a/public/images/sponsors/planio-205x130.png b/public/images/sponsors/planio-205x130.png new file mode 100644 index 00000000..d858e26f Binary files /dev/null and b/public/images/sponsors/planio-205x130.png differ diff --git a/public/images/sponsors/planio-205x60.png b/public/images/sponsors/planio-205x60.png new file mode 100644 index 00000000..c70b7faf Binary files /dev/null and b/public/images/sponsors/planio-205x60.png differ diff --git a/public/images/sponsors/postmark-140x40.png b/public/images/sponsors/postmark-140x40.png new file mode 100644 index 00000000..cbfd4acf Binary files /dev/null and b/public/images/sponsors/postmark-140x40.png differ diff --git a/public/images/sponsors/pusher-140x40.png b/public/images/sponsors/pusher-140x40.png new file mode 100644 index 00000000..a3869727 Binary files /dev/null and b/public/images/sponsors/pusher-140x40.png differ diff --git a/public/images/sponsors/railslove-140x40.png b/public/images/sponsors/railslove-140x40.png new file mode 100644 index 00000000..dc6bd9dc Binary files /dev/null and b/public/images/sponsors/railslove-140x40.png differ diff --git a/public/images/sponsors/railslove.png b/public/images/sponsors/railslove.png new file mode 100644 index 00000000..4c3da1ac Binary files /dev/null and b/public/images/sponsors/railslove.png differ diff --git a/public/images/sponsors/servergrove-140x40.png b/public/images/sponsors/servergrove-140x40.png new file mode 100644 index 00000000..05360ea4 Binary files /dev/null and b/public/images/sponsors/servergrove-140x40.png differ diff --git a/public/images/sponsors/shopify-140x40.png b/public/images/sponsors/shopify-140x40.png new file mode 100644 index 00000000..70d37581 Binary files /dev/null and b/public/images/sponsors/shopify-140x40.png differ diff --git a/public/images/sponsors/shopify.png b/public/images/sponsors/shopify.png new file mode 100644 index 00000000..e513522e Binary files /dev/null and b/public/images/sponsors/shopify.png differ diff --git a/public/images/sponsors/site5-205x60.png b/public/images/sponsors/site5-205x60.png new file mode 100644 index 00000000..1e03b3b0 Binary files /dev/null and b/public/images/sponsors/site5-205x60.png differ diff --git a/public/images/sponsors/soundcloud-100x60.png b/public/images/sponsors/soundcloud-100x60.png new file mode 100644 index 00000000..7bce4957 Binary files /dev/null and b/public/images/sponsors/soundcloud-100x60.png differ diff --git a/public/images/sponsors/soundcloud-205x130.png b/public/images/sponsors/soundcloud-205x130.png new file mode 100644 index 00000000..eda0ebee Binary files /dev/null and b/public/images/sponsors/soundcloud-205x130.png differ diff --git a/public/images/sponsors/soundcloud-205x60.png b/public/images/sponsors/soundcloud-205x60.png new file mode 100644 index 00000000..5aa886ad Binary files /dev/null and b/public/images/sponsors/soundcloud-205x60.png differ diff --git a/public/images/sponsors/soundcloud.png b/public/images/sponsors/soundcloud.png new file mode 100644 index 00000000..c00faba7 Binary files /dev/null and b/public/images/sponsors/soundcloud.png differ diff --git a/public/images/sponsors/stickermule-140x40.png b/public/images/sponsors/stickermule-140x40.png new file mode 100644 index 00000000..5fb9498c Binary files /dev/null and b/public/images/sponsors/stickermule-140x40.png differ diff --git a/public/images/sponsors/stripe-140x40.png b/public/images/sponsors/stripe-140x40.png new file mode 100644 index 00000000..d440f9ce Binary files /dev/null and b/public/images/sponsors/stripe-140x40.png differ diff --git a/public/images/sponsors/stripe-205x60.png b/public/images/sponsors/stripe-205x60.png new file mode 100644 index 00000000..f284cb94 Binary files /dev/null and b/public/images/sponsors/stripe-205x60.png differ diff --git a/public/images/sponsors/stripe-stamp-111x103.png b/public/images/sponsors/stripe-stamp-111x103.png new file mode 100644 index 00000000..ce37710e Binary files /dev/null and b/public/images/sponsors/stripe-stamp-111x103.png differ diff --git a/public/images/sponsors/thinkrelevance-205x60.png b/public/images/sponsors/thinkrelevance-205x60.png new file mode 100644 index 00000000..45b3f912 Binary files /dev/null and b/public/images/sponsors/thinkrelevance-205x60.png differ diff --git a/public/images/sponsors/thoughtbot-140x40.png b/public/images/sponsors/thoughtbot-140x40.png new file mode 100644 index 00000000..b12cd310 Binary files /dev/null and b/public/images/sponsors/thoughtbot-140x40.png differ diff --git a/public/images/sponsors/ticketevolution-100x60.png b/public/images/sponsors/ticketevolution-100x60.png new file mode 100644 index 00000000..f0b4bfbf Binary files /dev/null and b/public/images/sponsors/ticketevolution-100x60.png differ diff --git a/public/images/sponsors/ticketevolution-205x130.jpg b/public/images/sponsors/ticketevolution-205x130.jpg new file mode 100644 index 00000000..c1f233a0 Binary files /dev/null and b/public/images/sponsors/ticketevolution-205x130.jpg differ diff --git a/public/images/sponsors/ticketevolution-205x60.jpg b/public/images/sponsors/ticketevolution-205x60.jpg new file mode 100644 index 00000000..058d45f4 Binary files /dev/null and b/public/images/sponsors/ticketevolution-205x60.jpg differ diff --git a/public/images/sponsors/tupalo-205x60.png b/public/images/sponsors/tupalo-205x60.png new file mode 100644 index 00000000..2bbb0c4d Binary files /dev/null and b/public/images/sponsors/tupalo-205x60.png differ diff --git a/public/images/sponsors/twitter-205x60.png b/public/images/sponsors/twitter-205x60.png new file mode 100644 index 00000000..1b886678 Binary files /dev/null and b/public/images/sponsors/twitter-205x60.png differ diff --git a/public/images/sponsors/wooga-100x60.png b/public/images/sponsors/wooga-100x60.png new file mode 100644 index 00000000..e511d203 Binary files /dev/null and b/public/images/sponsors/wooga-100x60.png differ diff --git a/public/images/sponsors/wooga-205x130.png b/public/images/sponsors/wooga-205x130.png new file mode 100644 index 00000000..3c0f9138 Binary files /dev/null and b/public/images/sponsors/wooga-205x130.png differ diff --git a/public/images/sponsors/wooga-210x210.png b/public/images/sponsors/wooga-210x210.png new file mode 100644 index 00000000..ccf039f1 Binary files /dev/null and b/public/images/sponsors/wooga-210x210.png differ diff --git a/public/images/sponsors/xing-100x60.png b/public/images/sponsors/xing-100x60.png new file mode 100644 index 00000000..d85ee60f Binary files /dev/null and b/public/images/sponsors/xing-100x60.png differ diff --git a/public/images/sponsors/xing-205x130.png b/public/images/sponsors/xing-205x130.png new file mode 100644 index 00000000..605aa9d8 Binary files /dev/null and b/public/images/sponsors/xing-205x130.png differ diff --git a/public/images/sponsors/xing-210x210.png b/public/images/sponsors/xing-210x210.png new file mode 100644 index 00000000..edde528c Binary files /dev/null and b/public/images/sponsors/xing-210x210.png differ diff --git a/public/images/sponsors/zendesk-205x60.png b/public/images/sponsors/zendesk-205x60.png new file mode 100644 index 00000000..f08c70bd Binary files /dev/null and b/public/images/sponsors/zendesk-205x60.png differ diff --git a/public/images/sponsors/zweitag-100x60.png b/public/images/sponsors/zweitag-100x60.png new file mode 100644 index 00000000..1a5a9e92 Binary files /dev/null and b/public/images/sponsors/zweitag-100x60.png differ diff --git a/public/images/sponsors/zweitag-205x130.png b/public/images/sponsors/zweitag-205x130.png new file mode 100644 index 00000000..efcb3f47 Binary files /dev/null and b/public/images/sponsors/zweitag-205x130.png differ diff --git a/public/images/sponsors/zweitag-205x60.png b/public/images/sponsors/zweitag-205x60.png new file mode 100644 index 00000000..c2a01f20 Binary files /dev/null and b/public/images/sponsors/zweitag-205x60.png differ diff --git a/public/images/ui/background-left.png b/public/images/ui/background-left.png new file mode 100644 index 00000000..2736ceb0 Binary files /dev/null and b/public/images/ui/background-left.png differ diff --git a/public/images/ui/current-repository-indicator-even.png b/public/images/ui/current-repository-indicator-even.png new file mode 100644 index 00000000..3f239692 Binary files /dev/null and b/public/images/ui/current-repository-indicator-even.png differ diff --git a/public/images/ui/current-repository-indicator-odd.png b/public/images/ui/current-repository-indicator-odd.png new file mode 100644 index 00000000..3d45ecda Binary files /dev/null and b/public/images/ui/current-repository-indicator-odd.png differ diff --git a/public/images/ui/logo.png b/public/images/ui/logo.png new file mode 100644 index 00000000..4edc8501 Binary files /dev/null and b/public/images/ui/logo.png differ diff --git a/public/images/ui/off.png b/public/images/ui/off.png new file mode 100644 index 00000000..bee0a650 Binary files /dev/null and b/public/images/ui/off.png differ diff --git a/public/images/ui/on.png b/public/images/ui/on.png new file mode 100644 index 00000000..f0626a6f Binary files /dev/null and b/public/images/ui/on.png differ diff --git a/public/images/ui/onoff.png b/public/images/ui/onoff.png new file mode 100644 index 00000000..36c88865 Binary files /dev/null and b/public/images/ui/onoff.png differ diff --git a/public/images/ui/spinner.backup.gif b/public/images/ui/spinner.backup.gif new file mode 100644 index 00000000..5b33f7e5 Binary files /dev/null and b/public/images/ui/spinner.backup.gif differ diff --git a/public/images/ui/spinner.gif b/public/images/ui/spinner.gif new file mode 100644 index 00000000..e7eb4cb1 Binary files /dev/null and b/public/images/ui/spinner.gif differ diff --git a/public/images/ui/spinner_long.gif b/public/images/ui/spinner_long.gif new file mode 100644 index 00000000..a69ef3ef Binary files /dev/null and b/public/images/ui/spinner_long.gif differ diff --git a/public/images/ui/tipsy.gif b/public/images/ui/tipsy.gif new file mode 100644 index 00000000..74eebae2 Binary files /dev/null and b/public/images/ui/tipsy.gif differ diff --git a/public/images/ui/tools-button.png b/public/images/ui/tools-button.png new file mode 100644 index 00000000..75f0c900 Binary files /dev/null and b/public/images/ui/tools-button.png differ diff --git a/public/index.html b/public/index.html index c656ed18..338938d2 100644 --- a/public/index.html +++ b/public/index.html @@ -5,11 +5,13 @@ Travis CI - Distributed Continuous Integration Platform for the Open Source Community - diff --git a/public/javascripts/application.js b/public/javascripts/application.js index da941509..ffd947f9 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1 +1 @@ -minispade.register('templates', "(function() {Ember.TEMPLATES['application']=Ember.Handlebars.compile(\"
          \\n Travis CI\\n #\\n
          \\n\\n
          \\n {{outlet left}}\\n
          \\n\\n
          \\n {{outlet main}}\\n
          \\n\");Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#each build in content}}\\n {{#view Travis.Views.BuildsItemView contextBinding=\\\"build\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n {{/view}}\\n {{/each}}\\n \\n
          {{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
          {{number}}{{formatCommit commit}}{{{formatMessage commit.message short=\\\"true\\\"}}}{{formatDuration duration}}{{formatTime finished_at}}
          \\n\\n

          \\n \\n

          \\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"
          \\n
          \\n
          \\n
          {{t builds.name}}
          \\n
          {{number}}
          \\n
          {{t builds.finished_at}}
          \\n
          {{formatTime finished_at}}
          \\n
          {{t builds.duration}}
          \\n
          {{formatDuration duration}}
          \\n
          \\n\\n
          \\n
          {{t builds.commit}}
          \\n
          {{formatCommit commit}}
          \\n {{#if commit.compareUrl}}\\n
          {{t builds.compare}}
          \\n
          {{pathFrom commit.compareUrl}}
          \\n {{/if}}\\n {{#if commit.authorName}}\\n
          {{t builds.author}}
          \\n
          {{commit.authorName}}
          \\n {{/if}}\\n {{#if commit.committerName}}\\n
          {{t builds.committer}}
          \\n
          {{commit.committerName}}
          \\n {{/if}}\\n
          \\n\\n
          {{t builds.message}}
          \\n
          {{{formatMessage commit.message}}}
          \\n\\n {{#unless isMatrix}}\\n
          {{t builds.config}}
          \\n
          {{formatConfig config}}
          \\n {{/unless}}\\n
          \\n\\n {{#if isLoaded}}\\n {{#if isMatrix}}\\n {{view Travis.Views.JobsView jobsBinding=\\\"view.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.Views.JobsView jobsBinding=\\\"view.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.Views.LogView contextBinding=\\\"jobs.firstObject\\\"}}\\n {{/if}}\\n {{/if}}\\n
          \\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n \\n \\n \\n \\n {{#each configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each view.jobs}}\\n \\n \\n \\n \\n {{#each configValues}}\\n \\n {{/each}}\\n \\n {{/each}}\\n \\n
          \\n {{#if view.required}}\\n {{t jobs.build_matrix}}\\n {{else}}\\n {{t jobs.allowed_failures}}{{whats_this allow_failure_help}}\\n {{/if}}\\n
          {{this}}
          #{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
          \\n\\n {{#unless view.required}}\\n
          \\n
          {{t \\\"jobs.allowed_failures\\\"}}
          \\n
          \\n

          \\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed. This lets you add\\n in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n

          \\n

          \\n You can define allowed failures in the build matrix as follows:\\n

          \\n
          \\n      matrix:\\n        allow_failures:\\n          - rvm: ruby-head\\n        
          \\n
          \\n
          \\n {{/unless}}\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"
          {{{formatLog log.body}}}
          \\n\\n{{#if sponsor.name}}\\n

          \\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n

          \\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"
          \\n
          \\n
          \\n
          Job
          \\n
          {{number}}
          \\n
          {{t jobs.finished_at}}
          \\n
          {{formatTime finished_at}}
          \\n
          {{t jobs.duration}}
          \\n
          {{formatDuration duration}}
          \\n
          \\n\\n
          \\n
          {{t jobs.commit}}
          \\n
          {{formatCommit commit}}
          \\n {{#if commit.compareUrl}}\\n
          {{t jobs.compare}}
          \\n
          {{pathFrom commit.compareUrl}}
          \\n {{/if}}\\n {{#if commit.authorName}}\\n
          {{t jobs.author}}
          \\n
          {{commit.authorName}}
          \\n {{/if}}\\n {{#if commit.committerName}}\\n
          {{t jobs.committer}}
          \\n
          {{commit.committerName}}
          \\n {{/if}}\\n
          \\n\\n
          {{t jobs.message}}
          \\n
          {{formatMessage commit.message}}
          \\n
          {{t jobs.config}}
          \\n
          {{formatConfig config}}
          \\n
          \\n\\n {{view Travis.Views.LogView}}\\n
          \\n\\n\");Ember.TEMPLATES['repositories/list']=Ember.Handlebars.compile(\"{{#if content.lastObject.isLoaded}}\\n
            \\n {{#each repository in content}}\\n {{#view Travis.Views.RepositoriesItemView tagName=\\\"li\\\" classBinding=\\\"classes\\\" contextBinding=\\\"repository\\\"}}\\n \\n\\n

            \\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinished_at}}\\n

            \\n {{#if description}}\\n

            {{description}}

            \\n {{/if}}\\n \\n {{/view}}\\n {{/each}}\\n
              \\n{{/if}}\\n\");Ember.TEMPLATES['repositories/show']=Ember.Handlebars.compile(\"
              \\n

              \\n {{slug}}\\n

              \\n\\n

              {{description}}

              \\n\\n \\n\\n {{outlet tabs}}\\n\\n
              \\n {{outlet tab}}\\n
              \\n
              \\n\");Ember.TEMPLATES['repositories/tabs']=Ember.Handlebars.compile(\"\\n\");\n})();\n//@ sourceURL=templates");minispade.register('app', "(function() {(function() {\n\n $.mockjaxSettings.log = false;\n\n this.Travis = Em.Namespace.create({\n App: Em.Application.extend({\n initialize: function(router) {\n $.extend(this, Travis.Controllers);\n $.extend(this, Travis.Views);\n this.store = Travis.Store.create();\n return this._super(router || Travis.Router.create());\n }\n }),\n run: function() {\n this.app = Travis.App.create();\n return this.app.initialize();\n }\n });\nminispade.require('ext/jquery');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('router');\nminispade.require('store');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('locales');\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\n\n Travis.Controllers = {\n ApplicationController: Em.Controller.extend(),\n RepositoriesController: Em.ArrayController.extend(),\n RepositoryController: Em.ObjectController.extend(Travis.Urls.Repository),\n TabsController: Em.Controller.extend(),\n HistoryController: Em.ArrayController.extend(),\n BuildController: Em.ObjectController.extend(Travis.Urls.Commit),\n JobController: Em.ObjectController.extend(Travis.Urls.Commit)\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('whats_this', function(id) {\n return safe(' ');\n });\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n return Travis.Helpers.formatLog(log) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\n\n this.Travis.Helpers = {\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
              ');\n },\n formatLog: function(log) {\n return Travis.Log.filter(log);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '\\''';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n Repository: {\n urlGithub: (function() {\n return 'http://github.com/%@'.fmt(this.get('slug'));\n }).property('slug'),\n urlGithubWatchers: (function() {\n return 'http://github.com/%@/watchers'.fmt(this.get('slug'));\n }).property('slug'),\n urlGithubNetwork: (function() {\n return 'http://github.com/%@/network'.fmt(this.get('slug'));\n }).property('slug'),\n urlGithubAdmin: (function() {\n return 'http://github.com/%@/admin/hooks#travis_minibucket'.fmt(this.get('slug'));\n }).property('slug'),\n statusImage: (function() {\n return '%@.png'.fmt(this.get('slug'));\n }).property('slug')\n },\n Commit: {\n urlGithubCommit: (function() {\n return 'http://github.com/%@/commit/%@'.fmt(this.getPath('repository.slug'), this.getPath('commit.sha'));\n }).property('repository.slug', 'commit.sha'),\n urlAuthor: (function() {\n return 'mailto:%@'.fmt(this.getPath('commit.authorEmail'));\n }).property(),\n urlCommitter: (function() {\n return 'mailto:%@'.fmt(this.getPath('commit.committerEmail'));\n }).property()\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/build');\nminispade.require('models/repository');\nminispade.require('models/commit');\nminispade.require('models/job');\nminispade.require('models/artifact');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repository_id: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repository: (function() {\n if (this.get('repository_id')) {\n return Travis.Repository.find(this.get('repository_id'));\n }\n }).property('repository_id').cacheable(),\n tick: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepositoryId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend({\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n committed_at: DS.attr('string'),\n committer_name: DS.attr('string'),\n committer_email: DS.attr('string'),\n author_name: DS.attr('string'),\n author_email: DS.attr('string'),\n compare_url: DS.attr('string'),\n repository: DS.belongsTo('Travis.Repository'),\n commit: DS.belongsTo('Travis.Commit'),\n config: (function() {\n return this.getPath('data.config');\n }).property('data.config'),\n jobs: (function() {\n return Travis.Job.findMany(this.getPath('data.job_ids') || []);\n }).property('data.job_ids.length'),\n isMatrix: (function() {\n return this.getPath('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n configKeys: (function() {\n var config, headers, keys;\n config = this.get('config');\n if (!config) {\n return [];\n }\n keys = $.keys($.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'));\n headers = [I18n.t('build.job'), I18n.t('build.duration'), I18n.t('build.finished_at')];\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n tick: function() {\n this.notifyPropertyChange('duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Build.reopenClass({\n byRepositoryId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id,\n orderBy: 'number DESC'\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: '/repositories/' + id + '/builds.json?bare=true&after_number=' + build_number,\n repository_id: id,\n orderBy: 'number DESC'\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend({\n repository_id: DS.attr('number'),\n build_id: DS.attr('number'),\n log_id: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n allow_failure: DS.attr('boolean'),\n repository: DS.belongsTo('Travis.Repository'),\n commit: DS.belongsTo('Travis.Commit'),\n build: DS.belongsTo('Travis.Build'),\n log: DS.belongsTo('Travis.Artifact'),\n config: (function() {\n return this.getPath('data.config');\n }).property('data.config'),\n sponsor: (function() {\n return this.getPath('data.sponsor');\n }).property('data.sponsor'),\n configValues: (function() {\n var config;\n config = this.get('config');\n if (!config) {\n return [];\n }\n return $.values($.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl'));\n }).property('config'),\n appendLog: function(log) {\n return this.set('log', this.get('log') + log);\n },\n subscribe: function() {\n return Travis.app.subscribe('job-' + this.get('id'));\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.unsubscribe('job-' + this.get('id'));\n }\n }).observes('state'),\n tick: function() {\n this.notifyPropertyChange('duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.all();\n return Travis.app.store.filter(this, function(job) {\n return job.get('queue') === 'builds.' + queue;\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repository', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Repository = Travis.Model.extend({\n slug: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStarted_at: DS.attr('string'),\n lastBuildFinished_at: DS.attr('string'),\n primaryKey: 'slug',\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n return Travis.Build.byRepositoryId(this.get('id'), {\n event_type: 'push'\n });\n }).property(),\n pullRequests: (function() {\n return Travis.Build.byRepositoryId(this.get('id'), {\n event_type: 'pull_request'\n });\n }).property(),\n owner: (function() {\n return (this.get('slug') || this._id).split('/')[0];\n }).property('owner', 'name'),\n name: (function() {\n return (this.get('slug') || this._id).split('/')[1];\n }).property('owner', 'name'),\n lastBuildDuration: (function() {\n var duration;\n duration = this.getPath('data.lastBuildDuration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStarted_at'), this.get('lastBuildFinished_at'));\n }\n return duration;\n }).property('data.lastBuildDuration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n stats: (function() {}).property('slug'),\n select: function() {\n return Travis.Repository.select(self.get('id'));\n },\n tick: function() {\n this.notifyPropertyChange('lastBuildDuration');\n return this.notifyPropertyChange('lastBuildFinishedAt');\n }\n });\n\n this.Travis.Repository.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(owner) {\n return this.find({\n owner: owner,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.detect(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo) {\n return Ember.ArrayProxy.create({\n content: [repo]\n });\n } else {\n return this.find({\n slug: slug\n });\n }\n },\n select: function(id) {\n return this.find().forEach(function(repository) {\n return repository.set('selected', repository.get('id') === id);\n });\n },\n buildURL: function(slug) {\n if (slug) {\n return slug;\n } else {\n return 'repositories';\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repository");minispade.register('models/service_hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.ServiceHook = Travis.Model.extend({\n primaryKey: 'slug',\n name: DS.attr('string'),\n owner_name: DS.attr('string'),\n active: DS.attr('boolean'),\n slug: (function() {\n return [this.get('owner_name'), this.get('name')].join('/');\n }).property(),\n toggle: function() {\n this.set('active', !this.get('active'));\n return Travis.app.store.commit();\n }\n });\n\n this.Travis.ServiceHook.reopenClass({\n url: 'profile/service_hooks'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/service_hook");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.WorkerGroup = Ember.ArrayProxy.extend({\n init: function() {\n return this.set('content', []);\n },\n host: (function() {\n return this.getPath('firstObject.host');\n }).property()\n });\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n isTesting: (function() {\n return this.get('state') === 'working' && !!this.getPath('payload.config');\n }).property('state', 'config'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n display: (function() {\n var name, number, payload, repo, state;\n name = this.get('name').replace('travis-', '');\n state = this.get('state');\n payload = this.get('payload');\n if (state === 'working' && payload !== void 0) {\n repo = payload.repository ? $.truncate(payload.repository.slug, 18) : void 0;\n number = payload.build && payload.build.number ? ' #' + payload.build.number : '';\n state = repo ? repo + number : state;\n }\n return name + ': ' + state;\n }).property('state'),\n urlJob: (function() {\n return '#!/%@/jobs/%@'.fmt(this.getPath('payload.repository.slug'), this.getPath('payload.build.id'));\n }).property('payload', 'state')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('router', "(function() {(function() {\nminispade.require('hax0rs');\n\n this.Travis.Router = Em.Router.extend({\n location: 'hash',\n root: Em.Route.extend({\n \"default\": Em.Route.extend({\n route: '/',\n viewCurrent: Ember.Route.transitionTo('repository.current'),\n viewBuilds: Ember.Route.transitionTo('repository.builds'),\n viewBuild: Ember.Route.transitionTo('repository.build'),\n viewJob: Ember.Route.transitionTo('repository.job'),\n connectOutlets: function(router) {\n var repositories;\n repositories = Travis.Repository.find();\n router.set('repositories', repositories);\n router.set('job', void 0);\n return router.connectLeft(repositories);\n },\n index: Em.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n var repositories,\n _this = this;\n repositories = router.get('repositories');\n return onceLoaded(repositories, function() {\n var build, repository;\n repository = repositories.get('firstObject');\n build = Travis.Build.find(repository.get('lastBuildId'));\n router.connectRepository(repository);\n router.connectTabs();\n return router.connectBuild(build);\n });\n }\n }),\n repository: Em.Route.extend({\n route: '/:owner/:name',\n serialize: function(router, repository) {\n return router.serializeRepository(repository);\n },\n deserialize: function(router, params) {\n return router.deserializeRepository(params);\n },\n connectOutlets: function(router, repository) {\n return router.connectRepository(repository);\n },\n current: Em.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n var repository;\n repository = router.get('repository');\n return onceLoaded(repository, function() {\n var build;\n build = repository.get('lastBuild');\n router.connectTabs();\n return router.connectBuild(build);\n });\n }\n }),\n builds: Em.Route.extend({\n route: '/builds',\n connectOutlets: function(router) {\n var repository,\n _this = this;\n repository = router.get('repository');\n return onceLoaded(repository, function() {\n router.connectTabs();\n return router.connectBuilds(repository.get('builds'));\n });\n }\n }),\n build: Em.Route.extend({\n route: '/builds/:build_id',\n connectOutlets: function(router, build) {\n if (!(build instanceof Travis.Build)) {\n build = Travis.Build.find(build.id);\n }\n router.connectTabs(build);\n return router.connectBuild(build);\n }\n }),\n job: Em.Route.extend({\n route: '/jobs/:job_id',\n connectOutlets: function(router, job) {\n if (!(job instanceof Travis.Job)) {\n job = Travis.Job.find(job.id);\n }\n router.connectTabs(job.get('build'), job);\n return router.connectJob(job);\n }\n })\n })\n })\n }),\n connectLeft: function(repositories) {\n return this.get('applicationController').connectOutlet({\n outletName: 'left',\n name: 'repositories',\n context: repositories\n });\n },\n connectRepository: function(repository) {\n this.set('repository', repository);\n return this.get('applicationController').connectOutlet({\n outletName: 'main',\n name: 'repository',\n context: repository\n });\n },\n connectTabs: function(build, job) {\n this.setPath('tabsController.repository', this.get('repository'));\n this.setPath('tabsController.build', build);\n this.setPath('tabsController.job', job);\n return this.get('repositoryController').connectOutlet({\n outletName: 'tabs',\n name: 'tabs'\n });\n },\n connectBuilds: function(builds) {\n return this.get('repositoryController').connectOutlet({\n outletName: 'tab',\n name: 'history',\n context: builds\n });\n },\n connectBuild: function(build) {\n return this.get('repositoryController').connectOutlet({\n outletName: 'tab',\n name: 'build',\n context: build\n });\n },\n connectJob: function(job) {\n return this.get('repositoryController').connectOutlet({\n outletName: 'tab',\n name: 'job',\n context: job\n });\n },\n serializeRepository: function(object) {\n var slug;\n if (object instanceof Travis.Repository) {\n slug = object.get('slug') || object._id;\n return {\n owner: slug.split('/')[0],\n name: slug.split('/')[1]\n };\n } else {\n return object;\n }\n },\n deserializeRepository: function(params) {\n return Travis.Repository.find(\"\" + params.owner + \"/\" + params.name);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=router");minispade.register('store', "(function() {(function() {\nminispade.require('store/rest_adapter');\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n init: function() {\n this._super();\n return this.set('mappings', {\n builds: Travis.Build,\n commits: Travis.Commit,\n jobs: Travis.Job,\n service_hooks: Travis.ServiceHook\n });\n },\n plurals: {\n repository: 'repositories',\n branch: 'branches'\n },\n find: function(store, type, id) {\n var url;\n url = '/' + type.buildURL(id);\n return this.ajax(url, 'GET', {\n success: function(json) {\n var root;\n root = type.singularName();\n this.sideload(store, type, json, root);\n return store.load(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findMany: function(store, type, ids) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n data: {\n ids: ids\n },\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return store.loadMany(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findAll: function(store, type) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return store.loadMany(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findQuery: function(store, type, query, recordArray) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n data: query,\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return recordArray.load(json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n updateRecord: function(store, type, record) {\n var data, id, url;\n id = get(record, record.get('primaryKey') || 'id');\n url = '/' + type.buildURL(id);\n data = {\n root: record.toJSON()\n };\n return this.ajax(url, 'PUT', {\n data: data,\n success: function(json) {\n var root;\n root = type.singularName();\n this.sideload(store, type, json, root);\n return store.didUpdateRecord(record, json && json[root]);\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('views', "(function() {(function() {\n\n Travis.Views = {\n ApplicationView: Em.View.extend({\n templateName: 'application'\n }),\n RepositoriesView: Em.View.extend({\n templateName: 'repositories/list'\n }),\n RepositoriesItemView: Em.View.extend({\n classes: (function() {\n var classes, color;\n color = Travis.Helpers.colorForResult(this.getPath('context.lastBuildResult'));\n classes = ['repository', color];\n if (this.getPath('context.selected')) {\n classes.push('selected');\n }\n return classes.join(' ');\n }).property('context.lastBuildResult', 'context.selected'),\n lastBuild: (function() {\n return {\n owner: this.getPath('context.owner'),\n name: this.getPath('context.name'),\n build_id: this.getPath('context.lastBuildId')\n };\n }).property()\n }),\n RepositoryView: Em.View.extend({\n templateName: 'repositories/show'\n }),\n TabsView: Em.View.extend({\n templateName: 'repositories/tabs'\n }),\n HistoryView: Em.View.extend({\n templateName: 'builds/list'\n }),\n BuildsItemView: Em.View.extend({\n classes: (function() {\n return Travis.Helpers.colorForResult(this.getPath('context.result'));\n }).property('context.result')\n }),\n BuildView: Em.View.extend({\n templateName: 'builds/show',\n classes: (function() {\n return Helpers.colorForResult(this.get('result'));\n }).property('result'),\n requiredJobs: (function() {\n return this.getPath('context.jobs').filter(function(job) {\n return job.get('allow_failure') !== true;\n });\n }).property(),\n allowedFailureJobs: (function() {\n return this.getPath('context.jobs').filter(function(job) {\n return job.get('allow_failure');\n });\n }).property()\n }),\n JobsView: Em.View.extend({\n templateName: 'jobs/list'\n }),\n JobView: Em.View.extend({\n templateName: 'jobs/show',\n classes: (function() {\n return Travis.Helpers.colorForResult(this.get('result'));\n }).property('result')\n }),\n LogView: Em.View.extend({\n templateName: 'jobs/log'\n })\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('
              ').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repository) {\n return Utils.updateGithubStats(repository, $(this));\n }\n });\n\n $.extend({\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n camelize: function(string, uppercase) {\n if (uppercase || typeof uppercase === 'undefined') {\n string = $.capitalize(string);\n }\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(array) {\n return $.grep(array, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('hax0rs', "(function() {(function() {\n\n window.onTrue = function(object, path, callback) {\n var observer;\n if (object.getPath(path)) {\n return callback();\n } else {\n observer = function() {\n object.removeObserver(path, observer);\n return callback();\n };\n return object.addObserver(path, observer);\n }\n };\n\n window.onceLoaded = function() {\n var callback, object, objects, path;\n objects = Array.prototype.slice.apply(arguments);\n callback = objects.pop();\n objects = ((function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\n object = objects[_i];\n _results.push(object || null);\n }\n return _results;\n })()).compact();\n object = objects.shift();\n if (object) {\n path = Ember.isArray(object) ? 'firstObject.isLoaded' : 'isLoaded';\n return onTrue(object, path, function() {\n if (objects.length === 0) {\n return callback(object);\n } else {\n return onceLoaded.apply(objects + [callback]);\n }\n });\n } else {\n return callback(object);\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=hax0rs");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n.*<\\/p>)/g,\n migrate: /(\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /(\\$ bundle install.*<\\/p>\\n((Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<\\/p>\\n)*)/g,\n exec: /([\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log) {\n var result;\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, path;\n number = ix + 1;\n path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n return result += '

              %@%@

              \\n'.fmt(path, path, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/g, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, '');\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '
              ' + arguments[1].trim() + '
              ';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/
              ([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n refresh: function() {\n var id;\n id = this.get('id');\n if (id) {\n return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n }\n });\n\n this.Travis.Model.reopenClass({\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n this._super();\n return this.schedule();\n },\n tick: function() {\n var context,\n _this = this;\n context = this.get('context');\n this.get('targets').forEach(function(target) {\n target = context.get(target);\n if (!target) {\n return;\n }\n if (target.forEach) {\n return target.forEach(function(target) {\n return target.tick();\n });\n } else {\n return target.tick();\n }\n });\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('i18n', "(function() {console.log('FOO')\nvar I18n = I18n || {};\nI18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.
              \\n To test against multiple rubies, see\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.
              \\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
              \\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre →\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.
              \\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors →\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github
              \\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
              \\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores →\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.
              Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров →\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
              \\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=i18n");minispade.register('locales', "(function() {window.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.
              \\n To test against multiple rubies, see\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.
              \\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
              \\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre →\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.
              \\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors →\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github
              \\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
              \\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores →\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.
              Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров →\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
              \\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.getPath(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper"); \ No newline at end of file +minispade.register('templates', "(function() {Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#each build in content}}\\n {{#view Travis.Views.BuildsItemView contextBinding=\\\"build\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n {{/view}}\\n {{/each}}\\n \\n
              {{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
              {{number}}{{formatCommit commit}}{{{formatMessage commit.message short=\\\"true\\\"}}}{{formatDuration duration}}{{formatTime finished_at}}
              \\n\\n

              \\n \\n

              \\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#unless isLoaded}}\\n Loading ...\\n{{else}}\\n
              \\n
              \\n
              \\n
              {{t builds.name}}
              \\n
              {{number}}
              \\n
              {{t builds.finished_at}}
              \\n
              {{formatTime finished_at}}
              \\n
              {{t builds.duration}}
              \\n
              {{formatDuration duration}}
              \\n
              \\n\\n
              \\n
              {{t builds.commit}}
              \\n
              {{formatCommit commit}}
              \\n {{#if commit.compareUrl}}\\n
              {{t builds.compare}}
              \\n
              {{pathFrom commit.compareUrl}}
              \\n {{/if}}\\n {{#if commit.authorName}}\\n
              {{t builds.author}}
              \\n
              {{commit.authorName}}
              \\n {{/if}}\\n {{#if commit.committerName}}\\n
              {{t builds.committer}}
              \\n
              {{commit.committerName}}
              \\n {{/if}}\\n
              \\n\\n
              {{t builds.message}}
              \\n
              {{{formatMessage commit.message}}}
              \\n\\n {{#unless isMatrix}}\\n
              {{t builds.config}}
              \\n
              {{formatConfig config}}
              \\n {{/unless}}\\n
              \\n\\n {{#if isMatrix}}\\n {{view Travis.Views.JobsView jobsBinding=\\\"view.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.Views.JobsView jobsBinding=\\\"view.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.Views.LogView contextBinding=\\\"jobs.firstObject\\\"}}\\n {{/if}}\\n
              \\n{{/unless}}\\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n \\n \\n {{else}}\\n
              \\n {{t jobs.build_matrix}}\\n
              \\n \\n {{/if}}\\n \\n \\n {{#each configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.Views.JobsItemView contextBinding=\\\"job\\\"}}\\n \\n \\n \\n \\n {{#each configValues}}\\n \\n {{/each}}\\n \\n {{/view}}\\n {{/each}}\\n \\n
              \\n {{t jobs.allowed_failures}}\\n \\n
              {{this}}
              {{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
              \\n\\n {{#unless view.required}}\\n
              \\n
              {{t \\\"jobs.allowed_failures\\\"}}
              \\n
              \\n

              \\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed. This lets you add\\n in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n

              \\n

              \\n You can define allowed failures in the build matrix as follows:\\n

              \\n
               matrix:\\n  allow_failures:\\n    - rvm: ruby-head 
              \\n
              \\n
              \\n {{/unless}}\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"
              {{{formatLog log.body}}}
              \\n\\n{{#if sponsor.name}}\\n

              \\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n

              \\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"
              \\n
              \\n
              \\n
              Job
              \\n
              {{number}}
              \\n
              {{t jobs.finished_at}}
              \\n
              {{formatTime finished_at}}
              \\n
              {{t jobs.duration}}
              \\n
              {{formatDuration duration}}
              \\n
              \\n\\n
              \\n
              {{t jobs.commit}}
              \\n
              {{formatCommit commit}}
              \\n {{#if commit.compareUrl}}\\n
              {{t jobs.compare}}
              \\n
              {{pathFrom commit.compareUrl}}
              \\n {{/if}}\\n {{#if commit.authorName}}\\n
              {{t jobs.author}}
              \\n
              {{commit.authorName}}
              \\n {{/if}}\\n {{#if commit.committerName}}\\n
              {{t jobs.committer}}
              \\n
              {{commit.committerName}}
              \\n {{/if}}\\n
              \\n\\n
              {{t jobs.message}}
              \\n
              {{formatMessage commit.message}}
              \\n
              {{t jobs.config}}
              \\n
              {{formatConfig config}}
              \\n
              \\n\\n {{view Travis.Views.LogView}}\\n
              \\n\\n\");Ember.TEMPLATES['layouts/home']=Ember.Handlebars.compile(\"
              \\n {{outlet top}}\\n
              \\n\\n
              \\n
              \\n \\n
              \\n\\n \\n\\n
              \\n {{outlet left}}\\n
              \\n
              \\n\\n
              \\n {{outlet main}}\\n\\n {{outlet tabs}}\\n\\n
              \\n {{outlet tab}}\\n
              \\n\\n
              \\n {{outlet right}}\\n
              \\n
              \\n\\n\");Ember.TEMPLATES['layouts/sidebar']=Ember.Handlebars.compile(\"\\n {{t layouts.application.fork_me}}\\n\\n\\n
              \\n
               \\n
              \\n\\n{{view templateName=\\\"sponsors/decks\\\"}}\\n{{view templateName=\\\"workers/list\\\" id=\\\"workers\\\"}}\\n{{view templateName=\\\"queues/list\\\" id=\\\"queues\\\"}}\\n{{view templateName=\\\"sponsors/links\\\"}}\\n\\n
              \\n

              {{t layouts.about.alpha}}

              \\n

              {{{t layouts.about.messages.alpha}}}

              \\n
              \\n\\n
              \\n

              {{t layouts.about.join}}

              \\n \\n
              \\n\");Ember.TEMPLATES['layouts/simple']=Ember.Handlebars.compile(\"
              \\n {{outlet top}}\\n
              \\n\\n
              \\n {{outlet main}}\\n
              \\n\\n\");Ember.TEMPLATES['layouts/top']=Ember.Handlebars.compile(\"\\n

              Travis

              \\n
              \\n\\n\\n\");Ember.TEMPLATES['profile/hooks']=Ember.Handlebars.compile(\"{{#if content.length}}\\n
                \\n {{#each content}}\\n
              • \\n {{owner}}/{{name}}\\n

                {{description}}

                \\n\\n
                \\n \\n \\n
                \\n
              • \\n {{/each}}\\n
              \\n{{else}}\\n

              Please wait while we sync with GitHub

              \\n{{/if}}\\n\\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"

              {{name}}

              \\n\\n\\n
              \\n
              \\n {{t profiles.show.github}}:\\n
              \\n
              \\n {{login}}\\n
              \\n
              \\n {{t profiles.show.email}}:\\n
              \\n
              \\n {{email}}\\n
              \\n
              \\n {{t profiles.show.token}}:\\n
              \\n
              \\n {{token}}\\n
              \\n
              \\n\\n

              \\n {{{t profiles.show.messages.notice}}}\\n

              \\n\\n

              {{t profiles.show.your_locale}}

              \\n
              \\n \\n \\n
              \\n\\n

              {{t profiles.show.your_repos}}

              \\n

              \\n {{{t profiles.show.message.your_repos}}}\\n \\n {{{t profiles.show.message.config}}}\\n \\n

              \\n\\n{{outlet hooks}}\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"{{#each queue in queues}}\\n

              {{t queue}}: {{queue.name}}

              \\n
                \\n {{#each queue}}\\n
              • \\n {{repository.slug}}\\n {{#if number}}\\n #{{number}}\\n {{/if}}\\n
              • \\n {{else}}\\n {{t no_job}}\\n {{/each}}\\n
              \\n{{/each}}\\n\");Ember.TEMPLATES['repositories/list']=Ember.Handlebars.compile(\"
                \\n {{#each repository in content}}\\n {{#view Travis.Views.RepositoriesItemView contextBinding=\\\"repository\\\"}}\\n
              • \\n {{slug}}\\n #{{lastBuildNumber}}\\n\\n

                \\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinished_at}}\\n

                \\n {{#if description}}\\n

                {{description}}

                \\n {{/if}}\\n \\n
              • \\n {{/view}}\\n {{else}}\\n
              • \\n

                Loading

                \\n
              • \\n {{/each}}\\n
                  \\n\");Ember.TEMPLATES['repositories/show']=Ember.Handlebars.compile(\"{{#unless isLoaded}}\\n Loading ...\\n{{else}}\\n
                  \\n

                  \\n {{slug}}\\n

                  \\n\\n

                  {{description}}

                  \\n\\n \\n
                  \\n{{/unless}}\\n\");Ember.TEMPLATES['repositories/tabs']=Ember.Handlebars.compile(\"\\n\\n
                  \\n \\n
                  \\n

                  \\n

                  \\n

                  \\n

                  \\n

                  \\n
                  \\n
                  \\n\");Ember.TEMPLATES['sponsors/decks']=Ember.Handlebars.compile(\"

                  {{t layouts.application.sponsers}}

                  \\n\\n
                    \\n {{#each deck in sponsors.decks}}\\n {{#each deck}}\\n
                  • \\n \\n \\n \\n
                  • \\n {{/each}}\\n {{/each}}\\n
                  \\n\\n

                  \\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

                  \\n\");Ember.TEMPLATES['sponsors/links']=Ember.Handlebars.compile(\"
                  \\n

                  {{t layouts.application.sponsers}}

                  \\n\\n
                    \\n {{#each sponsors.links}}\\n
                  • \\n {{{link}}}\\n
                  • \\n {{/each}}\\n
                  \\n\\n

                  \\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

                  \\n
                  \\n\\n\");Ember.TEMPLATES['stats/show']=Ember.Handlebars.compile(\"Stats\\n\");Ember.TEMPLATES['workers/list']=Ember.Handlebars.compile(\"

                  {{t workers}}

                  \\n
                    \\n {{#each group in workers.groups}}\\n
                  • \\n
                    {{group.firstObject.host}}
                    \\n
                      \\n {{#each group}}\\n
                    • \\n {{#if isTesting}}\\n {{display}}\\n {{else}}\\n {{display}}\\n {{/if}}\\n
                    • \\n {{/each}}\\n
                    \\n
                  • \\n {{else}}\\n No workers\\n {{/each}}\\n
                  \\n\\n\");\n})();\n//@ sourceURL=templates");minispade.register('app', "(function() {(function() {\nminispade.require('hax0rs');\nminispade.require('ext/jquery');\n\n this.Travis = Em.Namespace.create({\n CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n INTERVALS: {\n sponsors: -1,\n times: -1\n },\n QUEUES: [\n {\n name: 'common',\n display: 'Common'\n }, {\n name: 'jvmotp',\n display: 'JVM and Erlang'\n }\n ],\n run: function(attrs) {\n return this.app = Travis.App.create(attrs || {});\n },\n App: Em.Application.extend({\n init: function() {\n this._super();\n this.connect();\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.routes = Travis.Router.create();\n this.routes.start();\n return this.initialize(Em.Object.create());\n },\n connect: function() {\n var view;\n this.controller = Em.Controller.create();\n view = Em.View.create({\n template: Em.Handlebars.compile('{{outlet layout}}'),\n controller: this.controller\n });\n return view.appendTo(this.get('rootElement') || 'body');\n },\n layout: function(name) {\n if (this._layout && this._layout.name === name) {\n return this._layout;\n } else {\n return this._layout = Travis.Layout[$.camelize(name)].create({\n parent: this.controller\n });\n }\n }\n })\n });\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('layout');\nminispade.require('models');\nminispade.require('router');\nminispade.require('store');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n Travis.Controllers = Em.Namespace.create({\n RepositoriesController: Em.ArrayController.extend(),\n RepositoryController: Em.ObjectController.extend(Travis.Urls.Repository),\n BuildsController: Em.ArrayController.extend(),\n BuildController: Em.ObjectController.extend(Travis.Urls.Commit),\n JobController: Em.ObjectController.extend(Travis.Urls.Commit),\n QueuesController: Em.ArrayController.extend(),\n UserController: Em.ObjectController.extend(),\n HooksController: Em.ArrayController.extend()\n });\nminispade.require('controllers/sponsors');\nminispade.require('controllers/workers');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/sponsors', "(function() {(function() {\n\n Travis.Controllers.SponsorsController = Em.ArrayController.extend({\n page: 0,\n arrangedContent: (function() {\n return this.get('shuffled').slice(this.start(), this.end());\n }).property('shuffled.length', 'page'),\n shuffled: (function() {\n var content;\n if (content = this.get('content')) {\n return $.shuffle(content);\n } else {\n return [];\n }\n }).property('content.length'),\n next: function() {\n return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n },\n pages: (function() {\n var length;\n length = this.getPath('content.length');\n if (length) {\n return parseInt(length / this.get('perPage') + 1);\n } else {\n return 1;\n }\n }).property('length'),\n isLast: function() {\n return this.get('page') === this.get('pages') - 1;\n },\n start: function() {\n return this.get('page') * this.get('perPage');\n },\n end: function() {\n return this.start() + this.get('perPage');\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sponsors");minispade.register('controllers/workers', "(function() {(function() {\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n Travis.Controllers.WorkersController = Em.ArrayController.extend({\n groups: (function() {\n var groups, host, worker, _i, _len, _ref;\n groups = {};\n _ref = this.get('content').toArray();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n worker = _ref[_i];\n host = worker.get('host');\n if (!(__indexOf.call(groups, host) >= 0)) {\n groups[host] = Em.ArrayProxy.create({\n content: []\n });\n }\n groups[host].pushObject(worker);\n }\n return $.values(groups);\n }).property('content.length')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/workers");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n return Travis.Helpers.formatLog(log) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\n\n this.Travis.Helpers = {\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
                  ');\n },\n formatLog: function(log) {\n return Travis.Log.filter(log);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '\\''';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n repository: function(repository) {\n if (repository) {\n return \"#!/\" + (repository.get('slug'));\n }\n },\n lastBuild: function(repository) {\n if (repository) {\n return \"#!/\" + (repository.get('slug')) + \"/builds/\" + (repository.get('lastBuildId'));\n }\n },\n builds: function(repository) {\n if (repository) {\n return \"#!/\" + (repository.get('slug')) + \"/builds\";\n }\n },\n build: function(repository, build) {\n if (repository && build) {\n return \"#!/\" + (repository.get('slug')) + \"/builds/\" + (build.get('id'));\n }\n },\n job: function(repository, job) {\n if (repository && job) {\n return \"#!/\" + (repository.get('slug')) + \"/jobs/\" + (job.get('id'));\n }\n },\n Repository: {\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property('slug'),\n urlGithubWatchers: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/watchers\";\n }).property('slug'),\n urlGithubNetwork: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/network\";\n }).property('slug'),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property('slug'),\n statusImage: (function() {\n return \"\" + (this.get('slug')) + \".png\";\n }).property('slug')\n },\n Commit: {\n urlGithubCommit: (function() {\n return \"http://github.com/\" + (this.getPath('repository.slug')) + \"/commit/\" + (this.getPath('commit.sha'));\n }).property('repository.slug', 'commit.sha'),\n urlAuthor: (function() {\n return \"mailto:\" + (this.getPath('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return \"mailto:\" + (this.getPath('commit.committerEmail'));\n }).property('commit.committerEmail')\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('layout', "(function() {(function() {\n\n Travis.Layout = Em.Namespace.create();\nminispade.require('layout/home');\nminispade.require('layout/sidebar');\nminispade.require('layout/profile');\nminispade.require('layout/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=layout");minispade.register('layout/base', "(function() {(function() {\n\n Travis.Layout.Base = Em.Object.extend({\n init: function() {\n this.parent = this.get('parent');\n this.setup(Array.prototype.slice.apply(arguments).concat(this.get('name')));\n return this.connect();\n },\n setup: function(controllers) {\n var key, klass, name, _i, _len;\n $.extend(this, Travis.Controllers);\n $.extend(this, Travis.Views);\n for (_i = 0, _len = controllers.length; _i < _len; _i++) {\n name = controllers[_i];\n key = \"\" + ($.camelize(name, false)) + \"Controller\";\n name = $.camelize(key);\n klass = Travis.Controllers[name] || Em.Controller;\n this[key] = klass.create({\n namespace: this,\n controllers: this\n });\n }\n this.controller = this[\"\" + ($.camelize(this.get('name'), false)) + \"Controller\"];\n return this.viewClass = Travis.Views[\"\" + ($.camelize(this.get('name'))) + \"Layout\"];\n },\n connect: function() {\n this.parent.connectOutlet({\n outletName: 'layout',\n controller: this.controller,\n viewClass: this.viewClass\n });\n return this.connectTop();\n },\n connectTop: function() {\n this.controller.connectOutlet({\n outletName: 'top',\n name: 'top'\n });\n return this.topController.set('tab', this.get('name'));\n },\n activate: function(action, params) {\n return this[\"view\" + ($.camelize(action))](params);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=layout/base");minispade.register('layout/home', "(function() {(function() {\n var _this = this;\nminispade.require('layout/base');\n\n Travis.Layout.Home = Travis.Layout.Base.extend({\n name: 'home',\n init: function() {\n this._super('top', 'repositories', 'repository', 'tabs', 'builds', 'build', 'job');\n this.connectLeft(Travis.Repository.find());\n return Travis.Layout.Sidebar.create({\n homeController: this.get('homeController')\n });\n },\n viewIndex: function(params) {\n var _this = this;\n return onceLoaded(this.repositories, function() {\n var repository;\n repository = _this.repositories.get('firstObject');\n _this.connectRepository(repository);\n _this.connectTabs('current');\n return _this.connectBuild(repository.get('lastBuild'));\n });\n },\n viewCurrent: function(params) {\n var _this = this;\n return this.viewRepository(params, function(repository) {\n _this.connectTabs('current');\n return _this.connectBuild(repository.get('lastBuild'));\n });\n },\n viewBuilds: function(params) {\n var _this = this;\n return this.viewRepository(params, function(repository) {\n _this.connectTabs('builds');\n return _this.connectBuilds(repository.get('builds'));\n });\n },\n viewBuild: function(params) {\n var _this = this;\n this.viewRepository(params);\n return this.buildBy(params.id, function(build) {\n _this.connectTabs('build', build);\n return _this.connectBuild(build);\n });\n },\n viewJob: function(params) {\n var _this = this;\n this.viewRepository(params);\n return this.jobBy(params.id, function(job) {\n _this.connectTabs('job', job.get('build'), job);\n return _this.connectJob(job);\n });\n },\n viewRepository: function(params, callback) {\n var _this = this;\n return this.repositoryBy(params, function(repository) {\n _this.connectRepository(repository);\n if (callback) {\n return callback(repository);\n }\n });\n },\n repositoryBy: function(params, callback) {\n var repositories,\n _this = this;\n repositories = Travis.Repository.bySlug(\"\" + params.owner + \"/\" + params.name);\n return onceLoaded(repositories, function() {\n return callback(repositories.get('firstObject'));\n });\n },\n buildBy: function(id, callback) {\n var build;\n build = Travis.Build.find(id);\n return onceLoaded(build, function() {\n return callback(build);\n });\n },\n jobBy: function(id, callback) {\n var job,\n _this = this;\n job = Travis.Job.find(id);\n return onceLoaded(job, function() {\n return callback(job);\n });\n },\n connectLeft: function(repositories) {\n this.repositories = repositories;\n return this.homeController.connectOutlet({\n outletName: 'left',\n name: 'repositories',\n context: repositories\n });\n },\n connectRepository: function(repository) {\n this.repository = repository;\n return this.homeController.connectOutlet({\n outletName: 'main',\n name: 'repository',\n context: repository\n });\n },\n connectTabs: function(tab, build, job) {\n this.tabsController.set('tab', tab);\n this.tabsController.set('repository', this.repository);\n this.tabsController.set('build', build);\n this.tabsController.set('job', job);\n return this.homeController.connectOutlet({\n outletName: 'tabs',\n name: 'tabs'\n });\n },\n connectBuilds: function(builds) {\n return this.homeController.connectOutlet({\n outletName: 'tab',\n name: 'builds',\n context: builds\n });\n },\n connectBuild: function(build) {\n return this.homeController.connectOutlet({\n outletName: 'tab',\n name: 'build',\n context: build\n });\n },\n connectJob: function(job) {\n return this.homeController.connectOutlet({\n outletName: 'tab',\n name: 'job',\n context: job\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=layout/home");minispade.register('layout/profile', "(function() {(function() {\nminispade.require('layout/base');\n\n Travis.Layout.Profile = Travis.Layout.Base.extend({\n name: 'profile',\n init: function() {\n return this._super('top', 'user', 'hooks');\n },\n viewShow: function(params) {\n this.connectUser(this.currentUser);\n return this.connectHooks(Travis.Hook.find());\n },\n connectUser: function(user) {\n return this.profileController.connectOutlet({\n outletName: 'main',\n name: 'user',\n context: user\n });\n },\n connectHooks: function(hooks) {\n if (hooks) {\n return this.userController.connectOutlet({\n outletName: 'hooks',\n name: 'hooks',\n context: hooks\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=layout/profile");minispade.register('layout/sidebar', "(function() {(function() {\nminispade.require('layout/base');\n\n Travis.Layout.Sidebar = Travis.Layout.Base.extend({\n name: 'sidebar',\n init: function() {\n this._super('sponsors', 'workers', 'queues');\n this.homeController = this.get('homeController');\n this.connectSponsors(Travis.Sponsor.decks(), Travis.Sponsor.links());\n this.connectWorkers(Travis.Worker.find());\n this.connectQueues(Travis.QUEUES);\n return Travis.Ticker.create({\n target: this,\n interval: Travis.INTERVALS.sponsors\n });\n },\n connect: function() {\n return this.homeController.connectOutlet({\n outletName: 'right',\n name: 'sidebar'\n });\n },\n connectSponsors: function(decks, links) {\n this.sponsorsController = Em.Controller.create({\n decks: Travis.Controllers.SponsorsController.create({\n perPage: 1,\n content: decks\n }),\n links: Travis.Controllers.SponsorsController.create({\n perPage: 6,\n content: links\n })\n });\n return this.homeController.set('sponsors', this.sponsorsController);\n },\n tick: function() {\n this.sponsorsController.get('decks').next();\n return this.sponsorsController.get('links').next();\n },\n connectWorkers: function(workers) {\n this.workersController.set('content', workers);\n return this.homeController.set('workers', this.workersController);\n },\n connectQueues: function(queues) {\n var queue;\n queues = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = queues.length; _i < _len; _i++) {\n queue = queues[_i];\n _results.push(Em.ArrayController.create({\n content: Travis.Job.queued(queue.name),\n name: queue.display\n }));\n }\n return _results;\n })();\n this.queuesController.set('content', queues);\n return this.homeController.set('queues', this.queuesController);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=layout/sidebar");minispade.register('layout/stats', "(function() {(function() {\nminispade.require('layout/base');\n\n Travis.Layout.Stats = Travis.Layout.Base.extend({\n name: 'stats',\n init: function() {\n return this._super('top', 'stats', 'hooks');\n },\n viewShow: function(params) {\n if (this.currentUser) {\n return this.connectStats();\n }\n },\n connectStats: function() {\n return this.statsController.connectOutlet({\n outletName: 'main',\n name: 'stats'\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=layout/stats");minispade.register('models', "(function() {(function() {\nminispade.require('models/artifact');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repository');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repository_id: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repository: (function() {\n if (this.get('repository_id')) {\n return Travis.Repository.find(this.get('repository_id'));\n }\n }).property('repository_id').cacheable(),\n tick: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepositoryId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend({\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n committed_at: DS.attr('string'),\n committer_name: DS.attr('string'),\n committer_email: DS.attr('string'),\n author_name: DS.attr('string'),\n author_email: DS.attr('string'),\n compare_url: DS.attr('string'),\n repository: DS.belongsTo('Travis.Repository'),\n commit: DS.belongsTo('Travis.Commit'),\n config: (function() {\n return this.getPath('data.config');\n }).property('data.config'),\n jobs: (function() {\n return Travis.Job.findMany(this.getPath('data.job_ids') || []);\n }).property('data.job_ids.length'),\n isMatrix: (function() {\n return this.getPath('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n configKeys: (function() {\n var config, headers, key, keys;\n if (!(config = this.get('config'))) {\n return [];\n }\n keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n headers = (function() {\n var _i, _len, _ref, _results;\n _ref = ['build.job', 'build.duration', 'build.finished_at'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _results.push(I18n.t(key));\n }\n return _results;\n })();\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n tick: function() {\n this.notifyPropertyChange('duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Build.reopenClass({\n byRepositoryId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id,\n orderBy: 'number DESC'\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: '/repositories/' + id + '/builds.json?bare=true&after_number=' + build_number,\n repository_id: id,\n orderBy: 'number DESC'\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Hook = Travis.Model.extend({\n primaryKey: 'slug',\n slug: DS.attr('string'),\n description: DS.attr('string'),\n active: DS.attr('boolean'),\n owner: (function() {\n return this.get('slug').split('/')[0];\n }).property('slug'),\n name: (function() {\n return this.get('slug').split('/')[1];\n }).property('slug'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property(),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property(),\n toggle: function() {\n this.set('active', !this.get('active'));\n return Travis.app.store.commit();\n }\n });\n\n this.Travis.Hook.reopenClass({\n url: 'profile/hooks'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend({\n repository_id: DS.attr('number'),\n build_id: DS.attr('number'),\n log_id: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n started_at: DS.attr('string'),\n finished_at: DS.attr('string'),\n allow_failure: DS.attr('boolean'),\n repository: DS.belongsTo('Travis.Repository'),\n commit: DS.belongsTo('Travis.Commit'),\n build: DS.belongsTo('Travis.Build'),\n log: DS.belongsTo('Travis.Artifact'),\n config: (function() {\n return this.getPath('data.config');\n }).property('data.config'),\n sponsor: (function() {\n return this.getPath('data.sponsor');\n }).property('data.sponsor'),\n configValues: (function() {\n var config;\n config = this.get('config');\n if (!config) {\n return [];\n }\n return $.values($.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl'));\n }).property('config'),\n appendLog: function(log) {\n return this.set('log', this.get('log') + log);\n },\n subscribe: function() {\n return Travis.app.subscribe('job-' + this.get('id'));\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.unsubscribe('job-' + this.get('id'));\n }\n }).observes('state'),\n tick: function() {\n this.notifyPropertyChange('duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.find();\n return Travis.app.store.filter(this, function(job) {\n return job.get('queue') === 'builds.' + queue;\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repository', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Repository = Travis.Model.extend({\n slug: DS.attr('string'),\n owner: DS.attr('string'),\n name: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStarted_at: DS.attr('string'),\n lastBuildFinished_at: DS.attr('string'),\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n return Travis.Build.byRepositoryId(this.get('id'), {\n event_type: 'push'\n });\n }).property(),\n pullRequests: (function() {\n return Travis.Build.byRepositoryId(this.get('id'), {\n event_type: 'pull_request'\n });\n }).property(),\n lastBuildDuration: (function() {\n var duration;\n duration = this.getPath('data.lastBuildDuration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStarted_at'), this.get('lastBuildFinished_at'));\n }\n return duration;\n }).property('data.lastBuildDuration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n stats: (function() {}).property('slug'),\n select: function() {\n return Travis.Repository.select(self.get('id'));\n },\n tick: function() {\n this.notifyPropertyChange('lastBuildDuration');\n return this.notifyPropertyChange('lastBuildFinishedAt');\n }\n });\n\n this.Travis.Repository.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(owner) {\n return this.find({\n owner: owner,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.detect(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo) {\n return Ember.ArrayProxy.create({\n content: [repo]\n });\n } else {\n return this.find({\n slug: slug\n });\n }\n },\n select: function(id) {\n return this.find().forEach(function(repository) {\n return repository.set('selected', repository.get('id') === id);\n });\n },\n buildURL: function(slug) {\n if (slug) {\n return slug;\n } else {\n return 'repositories';\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repository");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Sponsor = Travis.Model.extend({\n type: DS.attr('string'),\n url: DS.attr('string'),\n link: DS.attr('string'),\n image: (function() {\n return \"images/sponsors/\" + (this.getPath('data.image'));\n }).property('data.image')\n });\n\n Travis.Sponsor.reopenClass({\n decks: function() {\n return this.platinum().concat(this.gold());\n },\n platinum: function() {\n var platinum, sponsor, _i, _len, _results;\n platinum = this.byType('platinum').toArray();\n _results = [];\n for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n sponsor = platinum[_i];\n _results.push([sponsor]);\n }\n return _results;\n },\n gold: function() {\n var gold, _results;\n gold = this.byType('gold').toArray();\n _results = [];\n while (gold.length > 0) {\n _results.push(gold.splice(0, 2));\n }\n return _results;\n },\n links: function() {\n return this.byType('silver');\n },\n byType: function() {\n var types;\n types = Array.prototype.slice.apply(arguments);\n return Travis.Sponsor.filter(function(sponsor) {\n return types.indexOf(sponsor.get('type')) !== -1;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.User = Travis.Model.extend({\n name: DS.attr('string'),\n email: DS.attr('string'),\n login: DS.attr('string'),\n token: DS.attr('string'),\n gravatar: DS.attr('string'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('login'));\n }).property()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n isTesting: (function() {\n return this.get('state') === 'working' && !!this.getPath('payload.config');\n }).property('state', 'config'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n display: (function() {\n var name, number, payload, repo, state;\n name = this.get('name').replace('travis-', '');\n state = this.get('state');\n payload = this.get('payload');\n if (state === 'working' && payload !== void 0) {\n repo = payload.repository ? $.truncate(payload.repository.slug, 18) : void 0;\n number = payload.build && payload.build.number ? ' #' + payload.build.number : '';\n state = repo ? repo + number : state;\n }\n return name + ': ' + state;\n }).property('state'),\n urlJob: (function() {\n return \"#!/\" + (this.getPath('payload.repository.slug')) + \"/jobs/\" + (this.getPath('payload.build.id'));\n }).property('payload')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('router', "(function() {(function() {\n\n Travis.Router = Em.Object.extend({\n ROUTES: {\n '!/profile': ['profile', 'show'],\n '!/stats': ['stats', 'show'],\n '!/:owner/:name/jobs/:id/:line': ['home', 'job'],\n '!/:owner/:name/jobs/:id': ['home', 'job'],\n '!/:owner/:name/builds/:id': ['home', 'build'],\n '!/:owner/:name/builds': ['home', 'builds'],\n '!/:owner/:name/pull_requests': ['home', 'pullRequests'],\n '!/:owner/:name/branch_summary': ['home', 'branches'],\n '!/:owner/:name': ['home', 'current'],\n '': ['home', 'index']\n },\n start: function() {\n var route, target, _ref, _results;\n if (!this.started) {\n this.started = true;\n _ref = this.ROUTES;\n _results = [];\n for (route in _ref) {\n target = _ref[route];\n _results.push(this.route(route, target[0], target[1]));\n }\n return _results;\n }\n },\n route: function(route, layout, action) {\n var _this = this;\n return Em.routes.add(route, function(params) {\n return _this.action(layout, action, params);\n });\n },\n action: function(name, action, params) {\n var layout;\n layout = Travis.app.layout(name);\n layout.activate(action, params);\n return $('body').attr('id', name);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=router");minispade.register('store', "(function() {(function() {\nminispade.require('store/rest_adapter');\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n init: function() {\n this._super();\n return this.set('mappings', {\n builds: Travis.Build,\n commits: Travis.Commit,\n jobs: Travis.Job\n });\n },\n plurals: {\n repository: 'repositories',\n branch: 'branches'\n },\n find: function(store, type, id) {\n var url;\n url = '/' + type.buildURL(id);\n return this.ajax(url, 'GET', {\n success: function(json) {\n var root;\n root = type.singularName();\n this.sideload(store, type, json, root);\n return store.load(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findMany: function(store, type, ids) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n data: {\n ids: ids\n },\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return store.loadMany(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findAll: function(store, type) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return store.loadMany(type, json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n findQuery: function(store, type, query, recordArray) {\n var url;\n url = '/' + type.buildURL();\n return this.ajax(url, 'GET', {\n data: query,\n success: function(json) {\n var root;\n root = type.pluralName();\n this.sideload(store, type, json, root);\n return recordArray.load(json[root]);\n },\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n });\n },\n updateRecord: function(store, type, record) {\n var data, id, url;\n id = get(record, record.get('primaryKey') || 'id');\n url = '/' + type.buildURL(id);\n data = {\n root: record.toJSON()\n };\n return this.ajax(url, 'PUT', {\n data: data,\n success: function(json) {\n var root;\n root = type.singularName();\n this.sideload(store, type, json, root);\n return store.didUpdateRecord(record, json && json[root]);\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n this.Travis.Views = Em.Namespace.create({\n HomeLayout: Em.View.extend({\n templateName: 'layouts/home'\n }),\n ProfileLayout: Em.View.extend({\n templateName: 'layouts/simple'\n }),\n StatsLayout: Em.View.extend({\n templateName: 'layouts/simple'\n }),\n StatsView: Em.View.extend({\n templateName: 'stats/show'\n }),\n SidebarView: Em.View.extend({\n templateName: 'layouts/sidebar',\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#repository').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\nminispade.require('views/build');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/tabs');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/build', "(function() {(function() {\n\n this.Travis.Views.reopen({\n BuildsView: Em.View.extend({\n templateName: 'builds/list'\n }),\n BuildsItemView: Em.View.extend({\n color: (function() {\n return Travis.Helpers.colorForResult(this.getPath('context.result'));\n }).property('context.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.getPath('context.repository'), this.get('context'));\n }).property('context.repository.slug', 'context')\n }),\n BuildView: Em.View.extend({\n templateName: 'builds/show',\n color: (function() {\n return Travis.Helpers.colorForResult(this.getPath('controller.content.result'));\n }).property('controller.content.result'),\n requiredJobs: (function() {\n return this.getPath('controller.content.jobs').filter(function(job) {\n return job.get('allow_failure') !== true;\n });\n }).property('controller.content'),\n allowedFailureJobs: (function() {\n return this.getPath('controller.content.jobs').filter(function(job) {\n return job.get('allow_failure');\n });\n }).property('controller.content'),\n urlBuild: (function() {\n return Travis.Urls.build(this.getPath('context.repository'), this.get('context'));\n }).property('controller.content.repository.id', 'controller.content.id')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/job', "(function() {(function() {\n\n this.Travis.Views.reopen({\n JobsView: Em.View.extend({\n templateName: 'jobs/list',\n toggleHelp: function() {\n return $.facebox({\n div: '#allow_failure_help'\n });\n }\n }),\n JobsItemView: Em.View.extend({\n color: (function() {\n return Travis.Helpers.colorForResult(this.getPath('controller.result'));\n }).property('controller.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.getPath('context.repository'), this.get('context'));\n }).property('context.repository', 'context')\n }),\n JobView: Em.View.extend({\n templateName: 'jobs/show',\n color: (function() {\n return Travis.Helpers.colorForResult(this.getPath('controller.content.result'));\n }).property('controller.content.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.getPath('context.repository'), this.get('context'));\n }).property('controller.content.repository.id', 'controller.content.id')\n }),\n LogView: Em.View.extend({\n templateName: 'jobs/log'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/profile', "(function() {(function() {\n\n this.Travis.Views.reopen({\n UserView: Em.View.extend({\n templateName: 'profile/show',\n gravatarUrl: (function() {\n return \"http://www.gravatar.com/avatar/\" + (this.getPath('controller.content.gravatar')) + \"?s=48&d=mm\";\n }).property('controller.content.gravatar')\n }),\n HooksView: Em.View.extend({\n templateName: 'profile/hooks'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\n\n this.Travis.Views.reopen({\n RepositoriesView: Em.View.extend({\n templateName: 'repositories/list'\n }),\n RepositoriesItemView: Em.View.extend({\n classes: (function() {\n return $.compact(['repository', this.get('color'), this.get('selected')]).join(' ');\n }).property('context.lastBuildResult', 'context.selected'),\n color: (function() {\n return Travis.Helpers.colorForResult(this.getPath('context.lastBuildResult'));\n }).property('context.lastBuildResult'),\n selected: (function() {\n if (this.getPath('context.selected')) {\n return 'selected';\n }\n }).property('context.selected'),\n urlRepository: (function() {\n return Travis.Urls.repository(this.get('context'));\n }).property('context'),\n urlLastBuild: (function() {\n return Travis.Urls.lastBuild(this.get('context'));\n }).property('context')\n }),\n RepositoryView: Em.View.extend({\n templateName: 'repositories/show'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/tabs', "(function() {(function() {\n\n this.Travis.Views.reopen({\n TabsView: Em.View.extend({\n templateName: 'repositories/tabs',\n toggleTools: function() {\n return $('#tools .pane').toggle();\n },\n classCurrent: (function() {\n if (this.getPath('controller.tab') === 'current') {\n return 'active';\n }\n }).property('controller.tab'),\n classBuilds: (function() {\n if (this.getPath('controller.tab') === 'builds') {\n return 'active';\n }\n }).property('controller.tab'),\n classBuild: (function() {\n if (this.getPath('controller.tab') === 'build') {\n return 'active';\n }\n }).property('controller.tab'),\n classJob: (function() {\n if (this.getPath('controller.tab') === 'job') {\n return 'active';\n }\n }).property('controller.tab'),\n urlRepository: (function() {\n return Travis.Urls.repository(this.getPath('controller.repository'));\n }).property('controller.repository.id'),\n urlBuilds: (function() {\n return Travis.Urls.builds(this.getPath('controller.repository'));\n }).property('controller.repository.id'),\n urlBuild: (function() {\n return Travis.Urls.build(this.getPath('controller.repository'), this.getPath('controller.build'));\n }).property('controller.repository.slug', 'controller.build.id'),\n urlJob: (function() {\n return Travis.Urls.job(this.getPath('controller.repository'), this.getPath('controller.job'));\n }).property('controller.repository.slug', 'controller.job.id')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/tabs");minispade.register('views/top', "(function() {(function() {\n\n this.Travis.Views.reopen({\n TopView: Em.View.extend({\n templateName: 'layouts/top',\n signInSuccess: function(response) {\n return console.log(response);\n },\n gravatarUrl: (function() {\n return \"http://www.gravatar.com/avatar/\" + (this.getPath('controller.user.gravatar')) + \"?s=24&d=mm\";\n }).property('controller.user.gravatar'),\n classHome: (function() {\n if (this.getPath('controller.tab') === 'home') {\n return 'active';\n }\n }).property('controller.tab'),\n classStats: (function() {\n if (this.getPath('controller.tab') === 'stats') {\n return 'active';\n }\n }).property('controller.tab'),\n classProfile: (function() {\n if (this.getPath('controller.tab') === 'profile') {\n return 'profile active';\n } else {\n return 'profile';\n }\n }).property('controller.tab'),\n showProfile: function() {\n return $('#top .profile ul').show();\n },\n hideProfile: function() {\n return $('#top .profile ul').hide();\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n this.Travis.SPONSORS = [\n {\n type: 'platinum',\n url: \"http://www.wooga.com\",\n image: \"wooga-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://bendyworks.com\",\n image: \"bendyworks-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://cloudcontrol.com\",\n image: \"cloudcontrol-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://xing.de\",\n image: \"xing-205x130.png\"\n }, {\n type: 'gold',\n url: \"http://heroku.com\",\n image: \"heroku-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://soundcloud.com\",\n image: \"soundcloud-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://nedap.com\",\n image: \"nedap-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://mongohq.com\",\n image: \"mongohq-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://zweitag.de\",\n image: \"zweitag-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://kanbanery.com\",\n image: \"kanbanery-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://ticketevolution.com\",\n image: \"ticketevolution-205x60.jpg\"\n }, {\n type: 'gold',\n url: \"http://plan.io/travis\",\n image: \"planio-205x60.png\"\n }, {\n type: 'silver',\n link: \"Cobot: The one tool to run your coworking space\"\n }, {\n type: 'silver',\n link: \"JumpstartLab: We build developers\"\n }, {\n type: 'silver',\n link: \"Evil Martians: Agile Ruby on Rails development\"\n }, {\n type: 'silver',\n link: \"Zendesk: Love your helpdesk\"\n }, {\n type: 'silver',\n link: \"Stripe: Payments for developers\"\n }, {\n type: 'silver',\n link: \"Basho: We make Riak!\"\n }, {\n type: 'silver',\n link: \"Relevance: We deliver software solutions\"\n }, {\n type: 'silver',\n link: \"Mindmatters: Software für Menschen\"\n }, {\n type: 'silver',\n link: \"Amen: The best and worst of everything\"\n }, {\n type: 'silver',\n link: \"Site5: Premium Web Hosting Solutions\"\n }, {\n type: 'silver',\n link: \"Crowd Interactive: Leading Rails consultancy in Mexico\"\n }, {\n type: 'silver',\n link: \"Atomic Object: Work with really smart people\"\n }, {\n type: 'silver',\n link: \"Codeminer: smart services for your startup\"\n }, {\n type: 'silver',\n link: \"Cloudant: grow into your data layer, not out of it\"\n }, {\n type: 'silver',\n link: \"Gidsy: Explore, organize & book unique things to do!\"\n }, {\n type: 'silver',\n link: \"5apps: Package & deploy HTML5 apps automatically\"\n }, {\n type: 'silver',\n link: \"Meltmedia: We are Interactive Superheroes\"\n }, {\n type: 'silver',\n link: \"Fingertips offers design and development services\"\n }, {\n type: 'silver',\n link: \"Engine Yard: Build epic apps, let us handle the rest\"\n }, {\n type: 'silver',\n link: \"Malwarebytes: Defeat Malware once and for all.\"\n }, {\n type: 'silver',\n link: \"Readmill: The best reading app on the iPad.\"\n }, {\n type: 'silver',\n link: \"Medidata: clinical tech improving quality of life\"\n }, {\n type: 'silver',\n link: \"ESM: Japan's best agile Ruby/Rails consultancy\"\n }, {\n type: 'silver',\n link: \"Twitter: instantly connects people everywhere\"\n }, {\n type: 'silver',\n link: \"AGiLE ANiMAL: we <3 Travis CI.\"\n }, {\n type: 'silver',\n link: \"Tupalo: Discover, review & share local businesses.\"\n }\n ];\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('
                  ').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repository) {\n return Utils.updateGithubStats(repository, $(this));\n }\n });\n\n $.extend({\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n underscore: function(string) {\n return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n if (chr) {\n return \"_\" + (chr.toUpperCase());\n } else {\n return '';\n }\n });\n },\n camelize: function(string, uppercase) {\n string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(array) {\n return $.grep(array, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n intersect: function(array, other) {\n return array.filter(function(element) {\n return other.indexOf(element) !== -1;\n });\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n shuffle: function(array) {\n var current, tmp, top;\n array = array.slice();\n top = array.length;\n while (top && --top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n return array;\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('hax0rs', "(function() {(function() {\n\n window.onTrue = function(object, path, callback) {\n var observer;\n if (object.getPath(path)) {\n return callback();\n } else {\n observer = function() {\n object.removeObserver(path, observer);\n return callback();\n };\n return object.addObserver(path, observer);\n }\n };\n\n window.onceLoaded = function() {\n var callback, object, objects, path;\n objects = Array.prototype.slice.apply(arguments);\n callback = objects.pop();\n objects = ((function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\n object = objects[_i];\n _results.push(object || null);\n }\n return _results;\n })()).compact();\n object = objects.shift();\n if (object) {\n path = Ember.isArray(object) ? 'firstObject.isLoaded' : 'isLoaded';\n return onTrue(object, path, function() {\n if (objects.length === 0) {\n return callback(object);\n } else {\n return onceLoaded.apply(objects + [callback]);\n }\n });\n } else {\n return callback(object);\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=hax0rs");minispade.register('mocks', "(function() {(function() {\n var artifact, artifacts, build, builds, commits, hooks, id, job, jobs, repositories, repository, responseTime, workers, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m;\nminispade.require('ext/jquery');\n\n responseTime = 0;\n\n repositories = [\n {\n id: 1,\n owner: 'travis-ci',\n name: 'travis-core',\n slug: 'travis-ci/travis-core',\n build_ids: [1, 2],\n last_build_id: 1,\n last_build_number: 1,\n last_build_result: 0,\n description: 'Description of travis-core'\n }, {\n id: 2,\n owner: 'travis-ci',\n name: 'travis-assets',\n slug: 'travis-ci/travis-assets',\n build_ids: [3],\n last_build_id: 3,\n last_build_number: 3,\n last_build_result: 1,\n description: 'Description of travis-assets'\n }, {\n id: 3,\n owner: 'travis-ci',\n name: 'travis-hub',\n slug: 'travis-ci/travis-hub',\n build_ids: [4],\n last_build_id: 4,\n last_build_number: 4,\n description: 'Description of travis-hub'\n }\n ];\n\n builds = [\n {\n id: 1,\n repository_id: '1',\n commit_id: 1,\n job_ids: [1, 2],\n number: 1,\n event_type: 'push',\n config: {\n rvm: ['rbx', '1.9.3']\n },\n finished_at: '2012-06-20T00:21:20Z',\n duration: 35,\n result: 0\n }, {\n id: 2,\n repository_id: '1',\n commit_id: 2,\n job_ids: [3],\n number: 2,\n event_type: 'push',\n config: {\n rvm: ['rbx']\n }\n }, {\n id: 3,\n repository_id: '2',\n commit_id: 3,\n job_ids: [4],\n number: 3,\n event_type: 'push',\n config: {\n rvm: ['rbx']\n },\n finished_at: '2012-06-20T00:21:20Z',\n duration: 35,\n result: 1\n }, {\n id: 4,\n repository_id: '3',\n commit_id: 4,\n job_ids: [5],\n number: 4,\n event_type: 'push',\n config: {\n rvm: ['rbx']\n }\n }\n ];\n\n commits = [\n {\n id: 1,\n sha: '1234567',\n branch: 'master',\n message: 'commit message 1',\n author_name: 'author name',\n author_email: 'author@email.com',\n committer_name: 'committer name',\n committer_email: 'committer@email.com',\n compare_url: 'http://github.com/compare/0123456..1234567'\n }, {\n id: 2,\n sha: '2345678',\n branch: 'feature',\n message: 'commit message 2',\n author_name: 'author name',\n author_email: 'author@email.com',\n committer_name: 'committer name',\n committer_email: 'committer@email.com',\n compare_url: 'http://github.com/compare/0123456..2345678'\n }, {\n id: 3,\n sha: '3456789',\n branch: 'master',\n message: 'commit message 3',\n author_name: 'author name',\n author_email: 'author@email.com',\n committer_name: 'committer name',\n committer_email: 'committer@email.com',\n compare_url: 'http://github.com/compare/0123456..3456789'\n }, {\n id: 4,\n sha: '4567890',\n branch: 'master',\n message: 'commit message 4',\n author_name: 'author name',\n author_email: 'author@email.com',\n committer_name: 'committer name',\n committer_email: 'committer@email.com',\n compare_url: 'http://github.com/compare/0123456..4567890'\n }\n ];\n\n jobs = [\n {\n id: 1,\n repository_id: 1,\n build_id: 1,\n commit_id: 1,\n log_id: 1,\n number: '1.1',\n config: {\n rvm: 'rbx'\n },\n finished_at: '2012-06-20T00:21:20Z',\n duration: 35,\n result: 0\n }, {\n id: 2,\n repository_id: 1,\n build_id: 1,\n commit_id: 1,\n log_id: 2,\n number: '1.2',\n config: {\n rvm: '1.9.3'\n },\n allow_failure: true\n }, {\n id: 3,\n repository_id: 1,\n build_id: 2,\n commit_id: 2,\n log_id: 3,\n number: '2.1',\n config: {\n rvm: 'rbx'\n }\n }, {\n id: 4,\n repository_id: 2,\n build_id: 3,\n commit_id: 3,\n log_id: 4,\n number: '3.1',\n config: {\n rvm: 'rbx'\n },\n finished_at: '2012-06-20T00:21:20Z',\n duration: 35,\n result: 1\n }, {\n id: 5,\n repository_id: 3,\n build_id: 4,\n commit_id: 4,\n log_id: 5,\n number: '4.1',\n config: {\n rvm: 'rbx'\n }\n }, {\n id: 6,\n repository_id: 1,\n build_id: 5,\n commit_id: 5,\n log_id: 5,\n number: '5.1',\n config: {\n rvm: 'rbx'\n },\n state: 'created',\n queue: 'builds.common'\n }, {\n id: 7,\n repository_id: 1,\n build_id: 5,\n commit_id: 5,\n log_id: 5,\n number: '5.2',\n config: {\n rvm: 'rbx'\n },\n state: 'created',\n queue: 'builds.common'\n }\n ];\n\n artifacts = [\n {\n id: 1,\n body: 'log 1'\n }, {\n id: 2,\n body: 'log 2'\n }, {\n id: 3,\n body: 'log 3'\n }, {\n id: 4,\n body: 'log 4'\n }, {\n id: 5,\n body: 'log 4'\n }\n ];\n\n workers = [\n {\n id: 1,\n name: 'ruby-1',\n host: 'worker.travis-ci.org',\n state: 'ready'\n }, {\n id: 2,\n name: 'ruby-2',\n host: 'worker.travis-ci.org',\n state: 'ready'\n }\n ];\n\n hooks = [\n {\n slug: 'travis-ci/travis-core',\n description: 'description of travis-core',\n active: true,\n \"private\": false\n }, {\n slug: 'travis-ci/travis-assets',\n description: 'description of travis-assets',\n active: false,\n \"private\": false\n }, {\n slug: 'svenfuchs/minimal',\n description: 'description of minimal',\n active: true,\n \"private\": false\n }\n ];\n\n $.mockjax({\n url: '/repositories',\n responseTime: responseTime,\n responseText: {\n repositories: repositories\n }\n });\n\n for (_i = 0, _len = repositories.length; _i < _len; _i++) {\n repository = repositories[_i];\n $.mockjax({\n url: '/' + repository.slug,\n responseTime: responseTime,\n responseText: {\n repository: repository\n }\n });\n }\n\n for (_j = 0, _len1 = builds.length; _j < _len1; _j++) {\n build = builds[_j];\n $.mockjax({\n url: '/builds/' + build.id,\n responseTime: responseTime,\n responseText: {\n build: build,\n commit: commits[build.commit_id - 1],\n jobs: (function() {\n var _k, _len2, _ref, _results;\n _ref = build.job_ids;\n _results = [];\n for (_k = 0, _len2 = _ref.length; _k < _len2; _k++) {\n id = _ref[_k];\n _results.push(jobs[id - 1]);\n }\n return _results;\n })()\n }\n });\n }\n\n for (_k = 0, _len2 = repositories.length; _k < _len2; _k++) {\n repository = repositories[_k];\n $.mockjax({\n url: '/builds',\n data: {\n repository_id: repository.id,\n event_type: 'push',\n orderBy: 'number DESC'\n },\n responseTime: responseTime,\n responseText: {\n builds: (function() {\n var _l, _len3, _ref, _results;\n _ref = repository.build_ids;\n _results = [];\n for (_l = 0, _len3 = _ref.length; _l < _len3; _l++) {\n id = _ref[_l];\n _results.push(builds[id - 1]);\n }\n return _results;\n })(),\n commits: (function() {\n var _l, _len3, _ref, _results;\n _ref = repository.build_ids;\n _results = [];\n for (_l = 0, _len3 = _ref.length; _l < _len3; _l++) {\n id = _ref[_l];\n _results.push(commits[builds[id - 1].commit_id - 1]);\n }\n return _results;\n })()\n }\n });\n }\n\n for (_l = 0, _len3 = jobs.length; _l < _len3; _l++) {\n job = jobs[_l];\n $.mockjax({\n url: '/jobs/' + job.id,\n responseTime: responseTime,\n responseText: {\n job: job,\n commit: commits[job.commit_id - 1]\n }\n });\n }\n\n for (_m = 0, _len4 = artifacts.length; _m < _len4; _m++) {\n artifact = artifacts[_m];\n $.mockjax({\n url: '/artifacts/' + artifact.id,\n responseTime: responseTime,\n responseText: {\n artifact: artifact\n }\n });\n }\n\n $.mockjax({\n url: '/workers',\n responseTime: responseTime,\n responseText: {\n workers: workers\n }\n });\n\n $.mockjax({\n url: '/jobs',\n responseTime: responseTime,\n responseText: {\n jobs: $.select(jobs, function(job) {\n return job.state === 'created';\n })\n }\n });\n\n $.mockjax({\n url: '/profile/hooks',\n responseTime: responseTime,\n responseText: {\n hooks: hooks\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=mocks");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n.*<\\/p>)/g,\n migrate: /(\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /(\\$ bundle install.*<\\/p>\\n((Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<\\/p>\\n)*)/g,\n exec: /([\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log) {\n var result;\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, path;\n number = ix + 1;\n path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n return result += '

                  %@%@

                  \\n'.fmt(path, path, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/g, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, '');\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '
                  ' + arguments[1].trim() + '
                  ';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/
                  ([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n refresh: function() {\n var id;\n id = this.get('id');\n if (id) {\n return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n }\n });\n\n this.Travis.Model.reopenClass({\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n if (this.get('interval') !== -1) {\n return this.schedule();\n }\n },\n tick: function() {\n var context, target, targets, _i, _len;\n context = this.get('context');\n targets = this.get('targets') || [this.get('target')];\n for (_i = 0, _len = targets.length; _i < _len; _i++) {\n target = targets[_i];\n if (context) {\n target = context.get(target);\n }\n if (target) {\n target.tick();\n }\n }\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), this.get('interval') || Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('config/i18n', "(function() {console.log('FOO')\nvar I18n = I18n || {};\nI18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.
                  \\n To test against multiple rubies, see\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.
                  \\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
                  \\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre →\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.
                  \\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors →\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github
                  \\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
                  \\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores →\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.
                  Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров →\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
                  \\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/i18n");minispade.register('config/locales', "(function() {window.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.
                  \\n To test against multiple rubies, see\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.
                  \\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
                  \\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre →\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.
                  \\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors →\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github
                  \\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
                  \\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores →\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.
                  Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров →\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
                  \\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.getPath(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace"); \ No newline at end of file diff --git a/public/javascripts/mocks.js b/public/javascripts/mocks.js deleted file mode 100644 index 53ecb8f1..00000000 --- a/public/javascripts/mocks.js +++ /dev/null @@ -1,297 +0,0 @@ -(function() { - var artifact, artifacts, build, builds, commits, id, job, jobs, repositories, repository, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m; - - repositories = [ - { - id: 1, - owner: 'travis-ci', - name: 'travis-core', - slug: 'travis-ci/travis-core', - build_ids: [1, 2], - last_build_id: 1, - last_build_number: 1, - last_build_result: 0 - }, { - id: 2, - owner: 'travis-ci', - name: 'travis-assets', - slug: 'travis-ci/travis-assets', - build_ids: [3], - last_build_id: 3, - last_build_number: 3 - }, { - id: 3, - owner: 'travis-ci', - name: 'travis-hub', - slug: 'travis-ci/travis-hub', - build_ids: [4], - last_build_id: 4, - last_build_number: 4 - } - ]; - - builds = [ - { - id: 1, - repository_id: 'travis-ci/travis-core', - commit_id: 1, - job_ids: [1, 2], - number: 1, - event_type: 'push', - config: { - rvm: ['rbx', '1.9.3'] - }, - finished_at: '2012-06-20T00:21:20Z', - duration: 35, - result: 0 - }, { - id: 2, - repository_id: 'travis-ci/travis-core', - commit_id: 2, - job_ids: [3], - number: 2, - event_type: 'push', - config: { - rvm: ['rbx'] - } - }, { - id: 3, - repository_id: 'travis-ci/travis-assets', - commit_id: 3, - job_ids: [4], - number: 3, - event_type: 'push', - config: { - rvm: ['rbx'] - }, - finished_at: '2012-06-20T00:21:20Z', - duration: 35, - result: 0 - }, { - id: 4, - repository_id: 'travis-ci/travis-hub', - commit_id: 4, - job_ids: [5], - number: 4, - event_type: 'push', - config: { - rvm: ['rbx'] - } - } - ]; - - commits = [ - { - id: 1, - sha: '1234567', - branch: 'master', - message: 'commit message 1', - author_name: 'author name', - author_email: 'author@email.com', - compare_url: 'http://github.com/compare/0123456..1234567' - }, { - id: 2, - sha: '2345678', - branch: 'feature', - message: 'commit message 2', - author_name: 'author name', - author_email: 'author@email.com', - compare_url: 'http://github.com/compare/0123456..2345678' - }, { - id: 3, - sha: '3456789', - branch: 'master', - message: 'commit message 3', - author_name: 'author name', - author_email: 'author@email.com', - compare_url: 'http://github.com/compare/0123456..3456789' - }, { - id: 4, - sha: '4567890', - branch: 'master', - message: 'commit message 4', - author_name: 'author name', - author_email: 'author@email.com', - compare_url: 'http://github.com/compare/0123456..4567890' - } - ]; - - jobs = [ - { - id: 1, - repository_id: 1, - build_id: 1, - commit_id: 1, - log_id: 1, - number: '1.1', - config: { - rvm: 'rbx' - }, - finished_at: '2012-06-20T00:21:20Z', - duration: 35, - result: 0 - }, { - id: 2, - repository_id: 1, - build_id: 1, - commit_id: 1, - log_id: 2, - number: '1.2', - config: { - rvm: '1.9.3' - } - }, { - id: 3, - repository_id: 1, - build_id: 2, - commit_id: 2, - log_id: 3, - number: '2.1', - config: { - rvm: 'rbx' - } - }, { - id: 4, - repository_id: 2, - build_id: 3, - commit_id: 3, - log_id: 4, - number: '3.1', - config: { - rvm: 'rbx' - }, - finished_at: '2012-06-20T00:21:20Z', - duration: 35, - result: 0 - }, { - id: 5, - repository_id: 3, - build_id: 4, - commit_id: 4, - log_id: 5, - number: '4.1', - config: { - rvm: 'rbx' - } - } - ]; - - artifacts = [ - { - id: 1, - body: 'log 1' - }, { - id: 2, - body: 'log 2' - }, { - id: 3, - body: 'log 3' - }, { - id: 4, - body: 'log 4' - }, { - id: 5, - body: 'log 4' - } - ]; - - $.mockjax({ - url: '/repositories', - responseTime: 0, - responseText: { - repositories: repositories - } - }); - - for (_i = 0, _len = repositories.length; _i < _len; _i++) { - repository = repositories[_i]; - $.mockjax({ - url: '/' + repository.slug, - responseTime: 0, - responseText: { - repository: repository - } - }); - } - - for (_j = 0, _len1 = builds.length; _j < _len1; _j++) { - build = builds[_j]; - $.mockjax({ - url: '/builds/' + build.id, - responseTime: 0, - responseText: { - build: build, - commit: commits[build.commit_id - 1], - jobs: (function() { - var _k, _len2, _ref, _results; - _ref = build.job_ids; - _results = []; - for (_k = 0, _len2 = _ref.length; _k < _len2; _k++) { - id = _ref[_k]; - _results.push(jobs[id - 1]); - } - return _results; - })() - } - }); - } - - for (_k = 0, _len2 = repositories.length; _k < _len2; _k++) { - repository = repositories[_k]; - $.mockjax({ - url: '/builds', - data: { - repository_id: 1, - event_type: 'push', - orderBy: 'number DESC' - }, - responseTime: 0, - responseText: { - builds: (function() { - var _l, _len3, _ref, _results; - _ref = repository.build_ids; - _results = []; - for (_l = 0, _len3 = _ref.length; _l < _len3; _l++) { - id = _ref[_l]; - _results.push(builds[id - 1]); - } - return _results; - })(), - commits: (function() { - var _l, _len3, _ref, _results; - _ref = repository.build_ids; - _results = []; - for (_l = 0, _len3 = _ref.length; _l < _len3; _l++) { - id = _ref[_l]; - _results.push(commits[builds[id - 1].commit_id - 1]); - } - return _results; - })() - } - }); - } - - for (_l = 0, _len3 = jobs.length; _l < _len3; _l++) { - job = jobs[_l]; - $.mockjax({ - url: '/jobs/' + job.id, - responseTime: 0, - responseText: { - job: job, - commit: commits[job.commit_id - 1] - } - }); - } - - for (_m = 0, _len4 = artifacts.length; _m < _len4; _m++) { - artifact = artifacts[_m]; - $.mockjax({ - url: '/artifacts/' + artifact.id, - responseTime: 0, - responseText: { - artifact: artifact - } - }); - } - -}).call(this); diff --git a/public/javascripts/spec/foo_spec.js b/public/javascripts/spec/foo_spec.js deleted file mode 100644 index 45a301a3..00000000 --- a/public/javascripts/spec/foo_spec.js +++ /dev/null @@ -1,21 +0,0 @@ -(function() { - - console.log('foo'); - - describe('Foo', function() { - it('bar', function() { - var link; - console.log('before spec'); - link = $($('#repositories a.slug')[0]); - console.log($('body').html().toString()); - return console.log('after spec'); - }); - return it('bar', function() { - var link; - console.log('before spec'); - link = $($('#repositories a.slug')[0]); - return console.log('after spec'); - }); - }); - -}).call(this); diff --git a/public/javascripts/spec/spec_helper.js b/public/javascripts/spec/spec_helper.js deleted file mode 100644 index f1a33935..00000000 --- a/public/javascripts/spec/spec_helper.js +++ /dev/null @@ -1,15 +0,0 @@ -(function() { - - require('app'); - - $('body').append($('
                  ')); - - Travis.rootElement = '#spec_content'; - - Travis.initialize(); - - beforeEach(function() {}); - - afterEach(function() {}); - -}).call(this); diff --git a/public/javascripts/specs/specs.js b/public/javascripts/specs/specs.js index 0e255021..c36bd9d2 100644 --- a/public/javascripts/specs/specs.js +++ b/public/javascripts/specs/specs.js @@ -3,7 +3,7 @@ describe('The current build tab', function() { describe('on the "index" state', function() { beforeEach(function() { - app('/'); + app(''); return waitFor(buildRendered); }); it('displays the build summary', function() { @@ -18,18 +18,30 @@ }); }); return describe('given the current build has a job matrix', function() { - return it('displays the build matrix table', function() { - return displaysBuildMatrix({ + it('displays the jobs matrix table', function() { + return displaysJobMatrix({ + element: '#jobs', headers: ['Job', 'Duration', 'Finished', 'Rvm'], jobs: [ { - number: '#1.1', + id: 1, + number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' - }, { - number: '#1.2', + } + ] + }); + }); + return it('displays the allowed failure jobs matrix table', function() { + return displaysJobMatrix({ + element: '#allowed_failure_jobs', + headers: ['Job', 'Duration', 'Finished', 'Rvm'], + jobs: [ + { + id: 2, + number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', @@ -42,7 +54,7 @@ }); return describe('on the "current" state', function() { beforeEach(function() { - app('/travis-ci/travis-core'); + app('!/travis-ci/travis-core'); waitFor(repositoriesRendered); return waitFor(buildRendered); }); @@ -58,18 +70,30 @@ }); }); return describe('given the current build has a job matrix', function() { - return it('displays the build matrix table', function() { - return displaysBuildMatrix({ + it('displays the jobs matrix table', function() { + return displaysJobMatrix({ + element: '#jobs', headers: ['Job', 'Duration', 'Finished', 'Rvm'], jobs: [ { - number: '#1.1', + id: 1, + number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' - }, { - number: '#1.2', + } + ] + }); + }); + return it('displays the allowed failure jobs matrix table', function() { + return displaysJobMatrix({ + element: '#allowed_failure_jobs', + headers: ['Job', 'Duration', 'Finished', 'Rvm'], + jobs: [ + { + id: 2, + number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', @@ -87,18 +111,18 @@ describe('The repositories list', function() { beforeEach(function() { - app('/'); + app(''); return waitFor(repositoriesRendered); }); it('lists repositories', function() { var href; - href = $('#repositories a.slug').attr('href'); - return expect(href).toEqual('#/travis-ci/travis-core'); + href = $('#repositories a.current').attr('href'); + return expect(href).toEqual('#!/travis-ci/travis-core'); }); return it("links to the repository's last build action", function() { var href; href = $('#repositories a.last_build').attr('href'); - return expect(href).toEqual('#/travis-ci/travis-core/builds/1'); + return expect(href).toEqual('#!/travis-ci/travis-core/builds/1'); }); }); @@ -107,7 +131,7 @@ describe('The repository view', function() { beforeEach(function() { - app('/'); + app(''); return waitFor(repositoriesRendered); }); return it('displays the repository header', function() { @@ -126,33 +150,29 @@ if (Travis.app) { Travis.app.destroy(); } - return $('body #content').empty(); + $('#content').remove(); + return $('body').append('
                  '); }; this.app = function(url) { - var router; - router = Travis.Router.create({ - location: Em.NoneLocation.create() + reset(); + return Em.run(function() { + Travis.run({ + rootElement: $('#content') + }); + return Em.routes.set('location', url); }); - Travis.app = Travis.App.create(); - Travis.app.set('rootElement', '#content'); - Travis.app.initialize(router); - return router.route(url); }; - beforeEach(function() { - return reset(); - }); - }).call(this); (function() { this.repositoriesRendered = function() { - return $('#repositories li').length > 0; + return $('#repositories li a.current').text() !== ''; }; this.buildRendered = function() { - return $('#build .summary .number').text() !== ''; + return $('#summary .number').text() !== ''; }; this.matrixRendered = function() { @@ -164,29 +184,29 @@ this.displaysBuildSummary = function(data) { var element; - element = $('#build .summary .number a'); - expect(element.attr('href')).toEqual("#/" + data.repo + "/builds/" + data.id); - element = $('#build .summary .finished_at'); + element = $('#summary .number a'); + expect(element.attr('href')).toEqual("#!/" + data.repo + "/builds/" + data.id); + element = $('#summary .finished_at'); expect(element.text()).toMatch(/\d+ (\w+) ago/); - element = $('#build .summary .duration'); + element = $('#summary .duration'); expect(element.text()).toEqual(data.duration); - element = $('#build .summary .commit a'); + element = $('#summary .commit a'); expect(element.attr('href')).toEqual("http://github.com/" + data.repo + "/commit/" + data.commit); - element = $('#build .summary .commit a'); + element = $('#summary .commit a'); expect(element.text()).toEqual("" + data.commit + " (" + data.branch + ")"); - element = $('#build .summary .compare a'); + element = $('#summary .compare a'); expect(element.attr('href')).toEqual("http://github.com/compare/" + data.compare); - element = $('#build .summary .compare a'); + element = $('#summary .compare a'); expect(element.text()).toEqual(data.compare); - element = $('#build .summary .message'); + element = $('#summary .message'); return expect(element.text()).toEqual(data.message); }; - this.displaysBuildMatrix = function(data) { + this.displaysJobMatrix = function(data) { var element, headers; headers = (function() { var _i, _len, _ref, _results; - _ref = $('#jobs thead th'); + _ref = $("" + data.element + " thead th"); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { element = _ref[_i]; @@ -197,19 +217,19 @@ expect(headers).toEqual(data.headers); return $.each(data.jobs, function(ix, job) { ix = (ix + 1) * 3; - element = $("#jobs tr:nth-child(" + ix + ") td.number"); + element = $("" + data.element + " tr:nth-child(" + ix + ") td.number"); expect(element.text()).toEqual(job.number); - element = $("#jobs tr:nth-child(" + ix + ") td.number a"); - expect(element.attr('href')).toEqual("#/" + job.repo + "/jobs/" + job.id); - element = $("#jobs tr:nth-child(" + ix + ") td.duration"); + element = $("" + data.element + " tr:nth-child(" + ix + ") td.number a"); + expect(element.attr('href')).toEqual("#!/" + job.repo + "/jobs/" + job.id); + element = $("" + data.element + " tr:nth-child(" + ix + ") td.duration"); expect(element.text()).toEqual(job.duration); - element = $("#jobs tr:nth-child(" + ix + ") td.finished_at"); + element = $("" + data.element + " tr:nth-child(" + ix + ") td.finished_at"); if (job.finishedAt === '-') { expect(element.text()).toEqual('-'); } else { expect(element.text()).toMatch(job.finishedAt); } - element = $("#jobs tr:nth-child(" + ix + ") td:nth-child(6)"); + element = $("" + data.element + " tr:nth-child(" + ix + ") td:nth-child(6)"); return expect(element.text()).toEqual(job.rvm); }); }; @@ -232,6 +252,35 @@ }).call(this); (function() { - + describe('The tabs view', function() { + describe('on the "index" state', function() { + beforeEach(function() { + app(''); + return waitFor(repositoriesRendered); + }); + it('has a "current" tab linking to the current build', function() { + var href; + href = $('#tab_current a').attr('href'); + return expect(href).toEqual('#!/travis-ci/travis-core'); + }); + return it('has a "history" tab linking to the builds list', function() { + var href; + href = $('#tab_builds a').attr('href'); + return expect(href).toEqual('#!/travis-ci/travis-core/builds'); + }); + }); + return describe('on the "current" state', function() { + beforeEach(function() { + app('!/travis-ci/travis-core'); + waitFor(repositoriesRendered); + return waitFor(buildRendered); + }); + return it('has a "current" tab linking to the current build', function() { + var href; + href = $('#tab_current a').attr('href'); + return expect(href).toEqual('#!/travis-ci/travis-core'); + }); + }); + }); }).call(this); diff --git a/public/javascripts/vendor.js b/public/javascripts/vendor.js index da33d322..ec6288a0 100644 --- a/public/javascripts/vendor.js +++ b/public/javascripts/vendor.js @@ -2898,7 +2898,7 @@ Ember.isArray = function(obj) { Ember.makeArray(); => [] Ember.makeArray(null); => [] Ember.makeArray(undefined); => [] - Ember.makeArray('lindsay'); => ['lindsay'] + Ember.makeArray('lindsay'); => ['lindsay'] Ember.makeArray([1,2,42]); => [1,2,42] var controller = Ember.ArrayProxy.create({ content: [] }); @@ -5600,7 +5600,7 @@ Ember.RunLoop = RunLoop; call. Ember.run(function(){ - // code to be execute within a RunLoop + // code to be execute within a RunLoop }); @name run @@ -5638,7 +5638,7 @@ var run = Ember.run; an lower-level way to use a RunLoop instead of using Ember.run(). Ember.run.begin(); - // code to be execute within a RunLoop + // code to be execute within a RunLoop Ember.run.end(); @@ -5654,7 +5654,7 @@ Ember.run.begin = function() { instead of using Ember.run(). Ember.run.begin(); - // code to be execute within a RunLoop + // code to be execute within a RunLoop Ember.run.end(); @returns {void} @@ -7402,7 +7402,7 @@ Ember.inspect = function(obj) { /** Compares two objects, returning true if they are logically equal. This is a deeper comparison than a simple triple equal. For sets it will compare the - internal objects. For any other object that implements `isEqual()` it will + internal objects. For any other object that implements `isEqual()` it will respect that method. Ember.isEqual('hello', 'hello'); => true @@ -7584,7 +7584,7 @@ Ember.String = { > beta > gamma - @param {String} str + @param {String} str The string to split @returns {String} split string @@ -7593,7 +7593,7 @@ Ember.String = { /** Converts a camelized string into all lower case separated by underscores. - + 'innerHTML'.decamelize() => 'inner_html' 'action_name'.decamelize() => 'action_name' 'css-class-name'.decamelize() => 'css-class-name' @@ -7610,7 +7610,7 @@ Ember.String = { /** Replaces underscores or spaces with dashes. - + 'innerHTML'.dasherize() => 'inner-html' 'action_name'.dasherize() => 'action-name' 'css-class-name'.dasherize() => 'css-class-name' @@ -7777,7 +7777,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `property` extension of Javascript's Function prototype is available - when Ember.EXTEND_PROTOTYPES is true, which is the default. + when Ember.EXTEND_PROTOTYPES is true, which is the default. Computed properties allow you to treat a function like a property: @@ -7832,7 +7832,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `observes` extension of Javascript's Function prototype is available - when Ember.EXTEND_PROTOTYPES is true, which is the default. + when Ember.EXTEND_PROTOTYPES is true, which is the default. You can observe property changes simply by adding the `observes` call to the end of your method declarations in classes that you write. @@ -7843,7 +7843,7 @@ if (Ember.EXTEND_PROTOTYPES) { // Executes whenever the "value" property changes }.observes('value') }); - + @see Ember.Observable */ Function.prototype.observes = function() { @@ -7853,7 +7853,7 @@ if (Ember.EXTEND_PROTOTYPES) { /** The `observesBefore` extension of Javascript's Function prototype is - available when Ember.EXTEND_PROTOTYPES is true, which is the default. + available when Ember.EXTEND_PROTOTYPES is true, which is the default. You can get notified when a property changes is about to happen by by adding the `observesBefore` call to the end of your method @@ -7864,7 +7864,7 @@ if (Ember.EXTEND_PROTOTYPES) { // Executes whenever the "value" property is about to change }.observesBefore('value') }); - + @see Ember.Observable */ Function.prototype.observesBefore = function() { @@ -8463,9 +8463,9 @@ Ember.Enumerable = Ember.Mixin.create( /** Returns a copy of the array with all null elements removed. - + var arr = ["a", null, "c", null]; - arr.compact(); => ["a", "c"] + arr.compact(); => ["a", "c"] @returns {Array} the array without null elements. */ @@ -9468,7 +9468,7 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable, colors.clear(); => [] colors.length(); => 0 - @returns {Ember.Array} An empty Array. + @returns {Ember.Array} An empty Array. */ clear: function () { var len = get(this, 'length'); @@ -9662,15 +9662,15 @@ var get = Ember.get, set = Ember.set; @class ## Overview - + This mixin provides properties and property observing functionality, core features of the Ember object model. - + Properties and observers allow one object to observe changes to a property on another object. This is one of the fundamental ways that models, controllers and views communicate with each other in an Ember application. - + Any object that has this mixin applied can be used in observer operations. That includes Ember.Object and most objects you will interact with as you write your Ember application. @@ -9678,16 +9678,16 @@ var get = Ember.get, set = Ember.set; Note that you will not generally apply this mixin to classes yourself, but you will use the features provided by this module frequently, so it is important to understand how to use it. - + ## Using get() and set() - + Because of Ember's support for bindings and observers, you will always access properties using the get method, and set properties using the set method. This allows the observing objects to be notified and computed properties to be handled properly. - + More documentation about `get` and `set` are below. - + ## Observing Property Changes You typically observe property changes simply by adding the `observes` @@ -9699,7 +9699,7 @@ var get = Ember.get, set = Ember.set; // Executes whenever the "value" property changes }.observes('value') }); - + Although this is the most common way to add an observer, this capability is actually built into the Ember.Object class on top of two methods defined in this mixin: `addObserver` and `removeObserver`. You can use @@ -9712,12 +9712,12 @@ var get = Ember.get, set = Ember.set; This will call the `targetAction` method on the `targetObject` to be called whenever the value of the `propertyKey` changes. - - Note that if `propertyKey` is a computed property, the observer will be - called when any of the property dependencies are changed, even if the + + Note that if `propertyKey` is a computed property, the observer will be + called when any of the property dependencies are changed, even if the resulting value of the computed property is unchanged. This is necessary because computed properties are not computed until `get` is called. - + @extends Ember.Mixin */ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { @@ -9731,7 +9731,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method is usually similar to using object[keyName] or object.keyName, however it supports both computed properties and the unknownProperty handler. - + Because `get` unifies the syntax for accessing all these kinds of properties, it can make many refactorings easier, such as replacing a simple property with a computed property, or vice versa. @@ -9927,11 +9927,11 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { Ember.propertyDidChange(this, keyName); return this; }, - + /** Convenience method to call `propertyWillChange` and `propertyDidChange` in succession. - + @param {String} keyName The property key to be notified about. @returns {Ember.Observable} */ @@ -10023,7 +10023,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method will be called when a client attempts to get the value of a property that has not been defined in one of the typical ways. Override this method to create "virtual" properties. - + @param {String} key The name of the unknown property that was requested. @returns {Object} The property value or undefined. Default is undefined. */ @@ -10035,7 +10035,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { This method will be called when a client attempts to set the value of a property that has not been defined in one of the typical ways. Override this method to create "virtual" properties. - + @param {String} key The name of the unknown property to be set. @param {Object} value The value the unknown property is to be set to. */ @@ -10046,7 +10046,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** This is like `get`, but allows you to pass in a dot-separated property path. - + person.getPath('address.zip'); // return the zip person.getPath('children.firstObject.age'); // return the first kid's age @@ -10062,7 +10062,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** This is like `set`, but allows you to specify the property you want to set as a dot-separated property path. - + person.setPath('address.zip', 10011); // set the zip to 10011 person.setPath('children.firstObject.age', 6); // set the first kid's age to 6 @@ -10080,9 +10080,9 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Retrieves the value of a property, or a default value in the case that the property returns undefined. - + person.getWithDefault('lastName', 'Doe'); - + @param {String} keyName The name of the property to retrieve @param {Object} defaultValue The value to return if the property value is undefined @returns {Object} The property value or the defaultValue. @@ -10093,10 +10093,10 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Set the value of a property to the current value plus some amount. - + person.incrementProperty('age'); team.incrementProperty('score', 2); - + @param {String} keyName The name of the property to increment @param {Object} increment The amount to increment by. Defaults to 1 @returns {Object} The new property value @@ -10106,13 +10106,13 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { set(this, keyName, (get(this, keyName) || 0)+increment); return get(this, keyName); }, - + /** Set the value of a property to the current value minus some amount. - + player.decrementProperty('lives'); orc.decrementProperty('health', 5); - + @param {String} keyName The name of the property to decrement @param {Object} increment The amount to decrement by. Defaults to 1 @returns {Object} The new property value @@ -10126,9 +10126,9 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ { /** Set the value of a boolean property to the opposite of it's current value. - + starship.toggleProperty('warpDriveEnaged'); - + @param {String} keyName The name of the property to toggle @returns {Object} The new property value */ @@ -13478,6 +13478,8 @@ Ember.ControllerMixin.reopen({ if (controller && context) { controller.set('content', context); } view = viewClass.create(); if (controller) { set(view, 'controller', controller); } + + /* console.log(view, view.toString()) */ set(this, outletName, view); return view; @@ -13557,7 +13559,7 @@ var invokeForState = { `Ember.View` is the class in Ember responsible for encapsulating templates of HTML content, combining templates with data to render as sections of a page's DOM, and registering and responding to user-initiated events. - + ## HTML Tag The default HTML tag name used for a view's DOM representation is `div`. This can be customized by setting the `tagName` property. The following view class: @@ -13583,7 +13585,7 @@ var invokeForState = {
                  `class` attribute values can also be set by providing a `classNameBindings` property - set to an array of properties names for the view. The return value of these properties + set to an array of properties names for the view. The return value of these properties will be added as part of the value for the view's `class` attribute. These properties can be computed properties: @@ -13612,7 +13614,7 @@ var invokeForState = {
                  - When using boolean class name bindings you can supply a string value other than the + When using boolean class name bindings you can supply a string value other than the property name for use as the `class` HTML attribute by appending the preferred value after a ":" character when defining the binding: @@ -13653,11 +13655,11 @@ var invokeForState = {
                  - Updates to the the value of a class name binding will result in automatic update + Updates to the the value of a class name binding will result in automatic update of the HTML `class` attribute in the view's rendered HTML representation. If the value becomes `false` or `undefined` the class name will be removed. - Both `classNames` and `classNameBindings` are concatenated properties. + Both `classNames` and `classNameBindings` are concatenated properties. See `Ember.Object` documentation for more information about concatenated properties. ## HTML Attributes @@ -13703,7 +13705,7 @@ var invokeForState = { }.property() }) - Updates to the the property of an attribute binding will result in automatic update + Updates to the the property of an attribute binding will result in automatic update of the HTML attribute in the view's rendered HTML representation. `attributeBindings` is a concatenated property. See `Ember.Object` documentation @@ -13794,7 +13796,7 @@ var invokeForState = { primary templates, layouts can be any function that accepts an optional context parameter and returns a string of HTML that will be inserted inside view's tag. Views whose HTML element is self closing (e.g. ``) cannot have a layout and this property will be ignored. - + Most typically in Ember a layout will be a compiled Ember.Handlebars template. A view's layout can be set directly with the `layout` property or reference an @@ -13819,7 +13821,7 @@ var invokeForState = { See `Handlebars.helpers.yield` for more information. ## Responding to Browser Events - Views can respond to user-initiated events in one of three ways: method implementation, + Views can respond to user-initiated events in one of three ways: method implementation, through an event manager, and through `{{action}}` helper use in their template or layout. ### Method Implementation @@ -13836,8 +13838,8 @@ var invokeForState = { ### Event Managers Views can define an object as their `eventManager` property. This object can then implement methods that match the desired event names. Matching events that occur - on the view's rendered HTML or the rendered HTML of any of its DOM descendants - will trigger this method. A `jQuery.Event` object will be passed as the first + on the view's rendered HTML or the rendered HTML of any of its DOM descendants + will trigger this method. A `jQuery.Event` object will be passed as the first argument to the method and an `Ember.View` object as the second. The `Ember.View` will be the view whose rendered HTML was interacted with. This may be the view with the `eventManager` property or one of its descendent views. @@ -13871,7 +13873,7 @@ var invokeForState = { Similarly a view's event manager will take precedence for events of any views rendered as a descendent. A method name that matches an event name will not be called - if the view instance was rendered inside the HTML representation of a view that has + if the view instance was rendered inside the HTML representation of a view that has an `eventManager` property defined that handles events of the name. Events not handled by the event manager will still trigger method calls on the descendent. @@ -13893,7 +13895,7 @@ var invokeForState = { // eventManager doesn't handle click events }, mouseEnter: function(event){ - // will never be called if rendered inside + // will never be called if rendered inside // an OuterView. } }) @@ -13914,7 +13916,7 @@ var invokeForState = { Form events: 'submit', 'change', 'focusIn', 'focusOut', 'input' HTML5 drag and drop events: 'dragStart', 'drag', 'dragEnter', 'dragLeave', 'drop', 'dragEnd' - + ## Handlebars `{{view}}` Helper Other `Ember.View` instances can be included as part of a view's template by using the `{{view}}` Handlebars helper. See `Handlebars.helpers.view` for additional information. @@ -16292,7 +16294,7 @@ var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt; @class `Ember.CollectionView` is an `Ember.View` descendent responsible for managing a - collection (an array or array-like object) by maintaing a child view object and + collection (an array or array-like object) by maintaing a child view object and associated DOM representation for each item in the array and ensuring that child views and their associated rendered HTML are updated when items in the array are added, removed, or replaced. @@ -16336,7 +16338,7 @@ var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt; ## Automatic matching of parent/child tagNames - Setting the `tagName` property of a `CollectionView` to any of + Setting the `tagName` property of a `CollectionView` to any of "ul", "ol", "table", "thead", "tbody", "tfoot", "tr", or "select" will result in the item views receiving an appropriately matched `tagName` property. @@ -17183,15 +17185,15 @@ var arrayForEach = Ember.ArrayPolyfills.forEach; robotManager.getPath('currentState.name') // 'rampaging' Transition actions can also be created using the `transitionTo` method of the Ember.State class. The - following example StateManagers are equivalent: - + following example StateManagers are equivalent: + aManager = Ember.StateManager.create({ stateOne: Ember.State.create({ changeToStateTwo: Ember.State.transitionTo('stateTwo') }), stateTwo: Ember.State.create({}) }) - + bManager = Ember.StateManager.create({ stateOne: Ember.State.create({ changeToStateTwo: function(manager, context){ @@ -17272,7 +17274,7 @@ Ember.StateManager = Ember.State.extend( @default true */ errorOnUnhandledEvent: true, - + send: function(event, context) { Ember.assert('Cannot send event "' + event + '" while currentState is ' + get(this, 'currentState'), get(this, 'currentState')); if (arguments.length === 1) { context = {}; } @@ -20350,7 +20352,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ Will result in HTML structure: - @@ -20372,7 +20374,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ }) aView.appendTo('body') - + Will result in HTML structure:
                  @@ -20446,7 +20448,7 @@ EmberHandlebars.ViewHelper = Ember.Object.create({ Will result in the following HTML:
                  -
                  +
                  hi
                  @@ -20606,7 +20608,7 @@ var get = Ember.get, getPath = Ember.Handlebars.getPath, fmt = Ember.String.fmt;

                  Howdy Mary

                  Howdy Sara

                  - + @name Handlebars.helpers.collection @param {String} path @param {Hash} options @@ -21220,7 +21222,7 @@ var set = Ember.set, get = Ember.get; /** @class - Creates an HTML input of type 'checkbox' with HTML related properties + Creates an HTML input of type 'checkbox' with HTML related properties applied directly to the input. {{view Ember.Checkbox classNames="applicaton-specific-checkbox"}} @@ -21239,7 +21241,7 @@ var set = Ember.set, get = Ember.get; through the Ember object or by interacting with its rendered element representation via the mouse, keyboard, or touch. Updating the value of the checkbox via jQuery will result in the checked value of the object and its element losing synchronization. - + ## Layout and LayoutName properties Because HTML `input` elements are self closing `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. @@ -21351,7 +21353,7 @@ var get = Ember.get, set = Ember.set; ## Layout and LayoutName properties Because HTML `input` elements are self closing `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. - + @extends Ember.TextSupport */ Ember.TextField = Ember.View.extend(Ember.TextSupport, @@ -21528,7 +21530,7 @@ var get = Ember.get, set = Ember.set; ## Layout and LayoutName properties - Because HTML `textarea` elements do not contain inner HTML the `layout` and `layoutName` + Because HTML `textarea` elements do not contain inner HTML the `layout` and `layoutName` properties will not be applied. See `Ember.View`'s layout section for more information. @extends Ember.TextSupport @@ -23365,6 +23367,8 @@ DS.Store = Ember.Object.extend({ return clientIdToId[clientId]; }); + if (!neededIds.length) { return; } + var adapter = get(this, '_adapter'); if (adapter && adapter.findMany) { adapter.findMany(this, type, neededIds); } else { throw fmt("Adapter is either null or does not implement `findMany` method", this); } @@ -24285,7 +24289,7 @@ var DirtyState = DS.State.extend({ t.recordBecameClean(dirtyType, record); }); - manager.goToState('loaded'); + manager.goToState('saved'); } }, Uncommitted), @@ -24315,7 +24319,7 @@ var DirtyState = DS.State.extend({ t.recordBecameClean('inflight', record); }); - manager.goToState('loaded'); + manager.goToState('saved'); manager.send('invokeLifecycleCallbacks', dirtyType); }, @@ -25293,6 +25297,17 @@ DS.Model.reopenClass({ } }); +function getAttr(record, options, key) { + var data = get(record, 'data'); + var value = get(data, key); + + if (value === undefined) { + value = options.defaultValue; + } + + return value; +} + DS.attr = function(type, options) { var transform = DS.attr.transforms[type]; Ember.assert("Could not find model attribute of type " + type, !!transform); @@ -25322,14 +25337,12 @@ DS.attr = function(type, options) { if (arguments.length === 2) { value = transformTo(value); - this.setProperty(key, value); - } else { - data = get(this, 'data'); - value = get(data, key); - if (value === undefined) { - value = options.defaultValue; + if (value !== getAttr(this, options, key)) { + this.setProperty(key, value); } + } else { + value = getAttr(this, options, key); } return transformFrom(value); @@ -26828,6 +26841,316 @@ I18n.t = I18n.translate; I18n.l = I18n.localize; I18n.p = I18n.pluralize; +/* + * Facebox (for jQuery) + * version: 1.2 (05/05/2008) + * @requires jQuery v1.2 or later + * + * Examples at http://famspam.com/facebox/ + * + * Licensed under the MIT: + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ] + * + * Usage: + * + * jQuery(document).ready(function() { + * jQuery('a[rel*=facebox]').facebox() + * }) + * + * Terms + * Loads the #terms div in the box + * + * Terms + * Loads the terms.html page in the box + * + * Terms + * Loads the terms.png image in the box + * + * + * You can also use it programmatically: + * + * jQuery.facebox('some html') + * jQuery.facebox('some html', 'my-groovy-style') + * + * The above will open a facebox with "some html" as the content. + * + * jQuery.facebox(function($) { + * $.get('blah.html', function(data) { $.facebox(data) }) + * }) + * + * The above will show a loading screen before the passed function is called, + * allowing for a better ajaxy experience. + * + * The facebox function can also display an ajax page, an image, or the contents of a div: + * + * jQuery.facebox({ ajax: 'remote.html' }) + * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style') + * jQuery.facebox({ image: 'stairs.jpg' }) + * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style') + * jQuery.facebox({ div: '#box' }) + * jQuery.facebox({ div: '#box' }, 'my-groovy-style') + * + * Want to close the facebox? Trigger the 'close.facebox' document event: + * + * jQuery(document).trigger('close.facebox') + * + * Facebox also has a bunch of other hooks: + * + * loading.facebox + * beforeReveal.facebox + * reveal.facebox (aliased as 'afterReveal.facebox') + * init.facebox + * afterClose.facebox + * + * Simply bind a function to any of these hooks: + * + * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... }) + * + */ +(function($) { + $.facebox = function(data, klass) { + $.facebox.loading() + + if (data.ajax) fillFaceboxFromAjax(data.ajax, klass) + else if (data.image) fillFaceboxFromImage(data.image, klass) + else if (data.div) fillFaceboxFromHref(data.div, klass) + else if ($.isFunction(data)) data.call($) + else $.facebox.reveal(data, klass) + } + + /* + * Public, $.facebox methods + */ + + $.extend($.facebox, { + settings: { + opacity : 0.2, + overlay : true, + loadingImage : '/facebox/loading.gif', + closeImage : '/facebox/closelabel.png', + imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ], + faceboxHtml : '\ + ' + }, + + loading: function() { + init() + if ($('#facebox .loading').length == 1) return true + showOverlay() + + $('#facebox .content').empty() + $('#facebox .body').children().hide().end(). + append('
                  ') + + $('#facebox').css({ + top: getPageScroll()[1] + (getPageHeight() / 10), + left: $(window).width() / 2 - 205 + }).show() + + $(document).bind('keydown.facebox', function(e) { + if (e.keyCode == 27) $.facebox.close() + return true + }) + $(document).trigger('loading.facebox') + }, + + reveal: function(data, klass) { + $(document).trigger('beforeReveal.facebox') + if (klass) $('#facebox .content').addClass(klass) + $('#facebox .content').append(data) + $('#facebox .loading').remove() + $('#facebox .body').children().fadeIn('normal') + $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').width() / 2)) + $(document).trigger('reveal.facebox').trigger('afterReveal.facebox') + }, + + close: function() { + $(document).trigger('close.facebox') + return false + } + }) + + /* + * Public, $.fn methods + */ + + $.fn.facebox = function(settings) { + if ($(this).length == 0) return + + init(settings) + + function clickHandler() { + $.facebox.loading(true) + + // support for rel="facebox.inline_popup" syntax, to add a class + // also supports deprecated "facebox[.inline_popup]" syntax + var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) + if (klass) klass = klass[1] + + fillFaceboxFromHref(this.href, klass) + return false + } + + return this.bind('click.facebox', clickHandler) + } + + /* + * Private methods + */ + + // called one time to setup facebox on this page + function init(settings) { + if ($.facebox.settings.inited) return true + else $.facebox.settings.inited = true + + $(document).trigger('init.facebox') + makeCompatible() + + var imageTypes = $.facebox.settings.imageTypes.join('|') + $.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i') + + if (settings) $.extend($.facebox.settings, settings) + $('body').append($.facebox.settings.faceboxHtml) + + var preload = [ new Image(), new Image() ] + preload[0].src = $.facebox.settings.closeImage + preload[1].src = $.facebox.settings.loadingImage + + $('#facebox').find('.b:first, .bl').each(function() { + preload.push(new Image()) + preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1') + }) + + $('#facebox .close').click($.facebox.close) + $('#facebox .close_image').attr('src', $.facebox.settings.closeImage) + } + + // getPageScroll() by quirksmode.com + function getPageScroll() { + var xScroll, yScroll; + if (self.pageYOffset) { + yScroll = self.pageYOffset; + xScroll = self.pageXOffset; + } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict + yScroll = document.documentElement.scrollTop; + xScroll = document.documentElement.scrollLeft; + } else if (document.body) {// all other Explorers + yScroll = document.body.scrollTop; + xScroll = document.body.scrollLeft; + } + return new Array(xScroll,yScroll) + } + + // Adapted from getPageSize() by quirksmode.com + function getPageHeight() { + var windowHeight + if (self.innerHeight) { // all except Explorer + windowHeight = self.innerHeight; + } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode + windowHeight = document.documentElement.clientHeight; + } else if (document.body) { // other Explorers + windowHeight = document.body.clientHeight; + } + return windowHeight + } + + // Backwards compatibility + function makeCompatible() { + var $s = $.facebox.settings + + $s.loadingImage = $s.loading_image || $s.loadingImage + $s.closeImage = $s.close_image || $s.closeImage + $s.imageTypes = $s.image_types || $s.imageTypes + $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml + } + + // Figures out what you want to display and displays it + // formats are: + // div: #id + // image: blah.extension + // ajax: anything else + function fillFaceboxFromHref(href, klass) { + // div + if (href.match(/#/)) { + var url = window.location.href.split('#')[0] + var target = href.replace(url,'') + if (target == '#') return + $.facebox.reveal($(target).html(), klass) + + // image + } else if (href.match($.facebox.settings.imageTypesRegexp)) { + fillFaceboxFromImage(href, klass) + // ajax + } else { + fillFaceboxFromAjax(href, klass) + } + } + + function fillFaceboxFromImage(href, klass) { + var image = new Image() + image.onload = function() { + $.facebox.reveal('
                  ', klass) + } + image.src = href + } + + function fillFaceboxFromAjax(href, klass) { + $.get(href, function(data) { $.facebox.reveal(data, klass) }) + } + + function skipOverlay() { + return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null + } + + function showOverlay() { + if (skipOverlay()) return + + if ($('#facebox_overlay').length == 0) + $("body").append('
                  ') + + $('#facebox_overlay').hide().addClass("facebox_overlayBG") + .css('opacity', $.facebox.settings.opacity) + .click(function() { $(document).trigger('close.facebox') }) + .fadeIn(200) + return false + } + + function hideOverlay() { + if (skipOverlay()) return + + $('#facebox_overlay').fadeOut(200, function(){ + $("#facebox_overlay").removeClass("facebox_overlayBG") + $("#facebox_overlay").addClass("facebox_hide") + $("#facebox_overlay").remove() + }) + + return false + } + + /* + * Bindings + */ + + $(document).bind('close.facebox', function() { + $(document).unbind('keydown.facebox') + $('#facebox').fadeOut(function() { + $('#facebox .content').removeClass().addClass('content') + $('#facebox .loading').remove() + $(document).trigger('afterClose.facebox') + }) + hideOverlay() + }) + +})(jQuery); + /* * timeago: a jQuery plugin, version: 0.9.2 (2010-09-14) * @requires jQuery v1.2.3 or later @@ -26970,6 +27293,552 @@ I18n.p = I18n.pluralize; +// ========================================================================== +// Project: SproutCore - JavaScript Application Framework +// Copyright: ©2006-2011 Strobe Inc. and contributors. +// Portions ©2008-2011 Apple Inc. All rights reserved. +// License: Licensed under MIT license (see license.js) +// ========================================================================== + +var get = Ember.get, set = Ember.set; + +/** + Wether the browser supports HTML5 history. +*/ +var supportsHistory = !!(window.history && window.history.pushState); + +/** + Wether the browser supports the hashchange event. +*/ +var supportsHashChange = ('onhashchange' in window) && (document.documentMode === undefined || document.documentMode > 7); + +/** + @class + + Route is a class used internally by Ember.routes. The routes defined by your + application are stored in a tree structure, and this is the class for the + nodes. +*/ +var Route = Ember.Object.extend( +/** @scope Route.prototype */ { + + target: null, + + method: null, + + staticRoutes: null, + + dynamicRoutes: null, + + wildcardRoutes: null, + + add: function(parts, target, method) { + var part, nextRoute; + + // clone the parts array because we are going to alter it + parts = Ember.copy(parts); + + if (!parts || parts.length === 0) { + this.target = target; + this.method = method; + + } else { + part = parts.shift(); + + // there are 3 types of routes + switch (part.slice(0, 1)) { + + // 1. dynamic routes + case ':': + part = part.slice(1, part.length); + if (!this.dynamicRoutes) this.dynamicRoutes = {}; + if (!this.dynamicRoutes[part]) this.dynamicRoutes[part] = this.constructor.create(); + nextRoute = this.dynamicRoutes[part]; + break; + + // 2. wildcard routes + case '*': + part = part.slice(1, part.length); + if (!this.wildcardRoutes) this.wildcardRoutes = {}; + nextRoute = this.wildcardRoutes[part] = this.constructor.create(); + break; + + // 3. static routes + default: + if (!this.staticRoutes) this.staticRoutes = {}; + if (!this.staticRoutes[part]) this.staticRoutes[part] = this.constructor.create(); + nextRoute = this.staticRoutes[part]; + } + + // recursively add the rest of the route + if (nextRoute) nextRoute.add(parts, target, method); + } + }, + + routeForParts: function(parts, params) { + var part, key, route; + + // clone the parts array because we are going to alter it + parts = Ember.copy(parts); + + // if parts is empty, we are done + if (!parts || parts.length === 0) { + return this.method ? this : null; + + } else { + part = parts.shift(); + + // try to match a static route + if (this.staticRoutes && this.staticRoutes[part]) { + return this.staticRoutes[part].routeForParts(parts, params); + + } else { + + // else, try to match a dynamic route + for (key in this.dynamicRoutes) { + route = this.dynamicRoutes[key].routeForParts(parts, params); + if (route) { + params[key] = part; + return route; + } + } + + // else, try to match a wilcard route + for (key in this.wildcardRoutes) { + parts.unshift(part); + params[key] = parts.join('/'); + return this.wildcardRoutes[key].routeForParts(null, params); + } + + // if nothing was found, it means that there is no match + return null; + } + } + } + +}); + +/** + @class + + Ember.routes manages the browser location. You can change the hash part of the + current location. The following code + + Ember.routes.set('location', 'notes/edit/4'); + + will change the location to http://domain.tld/my_app#notes/edit/4. Adding + routes will register a handler that will be called whenever the location + changes and matches the route: + + Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route); + + You can pass additional parameters in the location hash that will be relayed + to the route handler: + + Ember.routes.set('location', 'notes/show/4?format=xml&language=fr'); + + The syntax for the location hash is described in the location property + documentation, and the syntax for adding handlers is described in the + add method documentation. + + Browsers keep track of the locations in their history, so when the user + presses the 'back' or 'forward' button, the location is changed, Ember.route + catches it and calls your handler. Except for Internet Explorer versions 7 + and earlier, which do not modify the history stack when the location hash + changes. + + Ember.routes also supports HTML5 history, which uses a '/' instead of a '#' + in the URLs, so that all your website's URLs are consistent. +*/ +var routes = Ember.routes = Ember.Object.create( + /** @scope Ember.routes.prototype */{ + + /** + Set this property to true if you want to use HTML5 history, if available on + the browser, instead of the location hash. + + HTML 5 history uses the history.pushState method and the window's popstate + event. + + By default it is false, so your URLs will look like: + + http://domain.tld/my_app#notes/edit/4 + + If set to true and the browser supports pushState(), your URLs will look + like: + + http://domain.tld/my_app/notes/edit/4 + + You will also need to make sure that baseURI is properly configured, as + well as your server so that your routes are properly pointing to your + SproutCore application. + + @see http://dev.w3.org/html5/spec/history.html#the-history-interface + @property + @type {Boolean} + */ + wantsHistory: false, + + /** + A read-only boolean indicating whether or not HTML5 history is used. Based + on the value of wantsHistory and the browser's support for pushState. + + @see wantsHistory + @property + @type {Boolean} + */ + usesHistory: null, + + /** + The base URI used to resolve routes (which are relative URLs). Only used + when usesHistory is equal to true. + + The build tools automatically configure this value if you have the + html5_history option activated in the Buildfile: + + config :my_app, :html5_history => true + + Alternatively, it uses by default the value of the href attribute of the + tag of the HTML document. For example: + + + + The value can also be customized before or during the exectution of the + main() method. + + @see http://www.w3.org/TR/html5/semantics.html#the-base-element + @property + @type {String} + */ + baseURI: document.baseURI, + + /** @private + A boolean value indicating whether or not the ping method has been called + to setup the Ember.routes. + + @property + @type {Boolean} + */ + _didSetup: false, + + /** @private + Internal representation of the current location hash. + + @property + @type {String} + */ + _location: null, + + /** @private + Routes are stored in a tree structure, this is the root node. + + @property + @type {Route} + */ + _firstRoute: null, + + /** @private + An internal reference to the Route class. + + @property + */ + _Route: Route, + + /** @private + Internal method used to extract and merge the parameters of a URL. + + @returns {Hash} + */ + _extractParametersAndRoute: function(obj) { + var params = {}, + route = obj.route || '', + separator, parts, i, len, crumbs, key; + + separator = (route.indexOf('?') < 0 && route.indexOf('&') >= 0) ? '&' : '?'; + parts = route.split(separator); + route = parts[0]; + if (parts.length === 1) { + parts = []; + } else if (parts.length === 2) { + parts = parts[1].split('&'); + } else if (parts.length > 2) { + parts.shift(); + } + + // extract the parameters from the route string + len = parts.length; + for (i = 0; i < len; ++i) { + crumbs = parts[i].split('='); + params[crumbs[0]] = crumbs[1]; + } + + // overlay any parameter passed in obj + for (key in obj) { + if (obj.hasOwnProperty(key) && key !== 'route') { + params[key] = '' + obj[key]; + } + } + + // build the route + parts = []; + for (key in params) { + parts.push([key, params[key]].join('=')); + } + params.params = separator + parts.join('&'); + params.route = route; + + return params; + }, + + /** + The current location hash. It is the part in the browser's location after + the '#' mark. + + The following code + + Ember.routes.set('location', 'notes/edit/4'); + + will change the location to http://domain.tld/my_app#notes/edit/4 and call + the correct route handler if it has been registered with the add method. + + You can also pass additional parameters. They will be relayed to the route + handler. For example, the following code + + Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route); + Ember.routes.set('location', 'notes/show/4?format=xml&language=fr'); + + will change the location to + http://domain.tld/my_app#notes/show/4?format=xml&language=fr and call the + MyApp.route method with the following argument: + + { route: 'notes/show/4', + params: '?format=xml&language=fr', + controller: 'notes', + action: 'show', + id: '4', + format: 'xml', + language: 'fr' } + + The location can also be set with a hash, the following code + + Ember.routes.set('location', + { route: 'notes/edit/4', format: 'xml', language: 'fr' }); + + will change the location to + http://domain.tld/my_app#notes/show/4?format=xml&language=fr. + + The 'notes/show/4&format=xml&language=fr' syntax for passing parameters, + using a '&' instead of a '?', as used in SproutCore 1.0 is still supported. + + @property + @type {String} + */ + location: function(key, value) { + this._skipRoute = false; + return this._extractLocation(key, value); + }.property(), + + _extractLocation: function(key, value) { + var crumbs, encodedValue; + + if (value !== undefined) { + if (value === null) { + value = ''; + } + + if (typeof(value) === 'object') { + crumbs = this._extractParametersAndRoute(value); + value = crumbs.route + crumbs.params; + } + + if (!Ember.empty(value) || (this._location && this._location !== value)) { + encodedValue = encodeURI(value); + + if (this.usesHistory) { + if (encodedValue.length > 0) { + encodedValue = '/' + encodedValue; + } + window.history.pushState(null, null, get(this, 'baseURI') + encodedValue); + } else { + window.location.hash = encodedValue; + } + } + + this._location = value; + } + + return this._location; + }, + + /** + You usually don't need to call this method. It is done automatically after + the application has been initialized. + + It registers for the hashchange event if available. If not, it creates a + timer that looks for location changes every 150ms. + */ + ping: function() { + var that; + + if (!this._didSetup) { + this._didSetup = true; + + if (get(this, 'wantsHistory') && supportsHistory) { + this.usesHistory = true; + + popState(); + jQuery(window).bind('popstate', popState); + + } else { + this.usesHistory = false; + + if (supportsHashChange) { + hashChange(); + jQuery(window).bind('hashchange', hashChange); + + } else { + // we don't use a Ember.Timer because we don't want + // a run loop to be triggered at each ping + that = this; + this._invokeHashChange = function() { + that.hashChange(); + setTimeout(that._invokeHashChange, 100); + }; + this._invokeHashChange(); + } + } + } + }, + + /** + Adds a route handler. Routes have the following format: + + - 'users/show/5' is a static route and only matches this exact string, + - ':action/:controller/:id' is a dynamic route and the handler will be + called with the 'action', 'controller' and 'id' parameters passed in a + hash, + - '*url' is a wildcard route, it matches the whole route and the handler + will be called with the 'url' parameter passed in a hash. + + Route types can be combined, the following are valid routes: + + - 'users/:action/:id' + - ':controller/show/:id' + - ':controller/ *url' (ignore the space, because of jslint) + + @param {String} route the route to be registered + @param {Object} target the object on which the method will be called, or + directly the function to be called to handle the route + @param {Function} method the method to be called on target to handle the + route, can be a function or a string + */ + add: function(route, target, method) { + if (!this._didSetup) { + Ember.run.once(this, 'ping'); + } + + if (method === undefined && Ember.typeOf(target) === 'function') { + method = target; + target = null; + } else if (Ember.typeOf(method) === 'string') { + method = target[method]; + } + + if (!this._firstRoute) this._firstRoute = Route.create(); + this._firstRoute.add(route.split('/'), target, method); + + return this; + }, + + /** + Observer of the 'location' property that calls the correct route handler + when the location changes. + */ + locationDidChange: function() { + this.trigger(); + }.observes('location'), + + /** + Triggers a route even if already in that route (does change the location, if it + is not already changed, as well). + + If the location is not the same as the supplied location, this simply lets "location" + handle it (which ends up coming back to here). + */ + trigger: function() { + var location = get(this, 'location'), + params, route; + + if (this._firstRoute) { + params = this._extractParametersAndRoute({ route: location }); + location = params.route; + delete params.route; + delete params.params; + + route = this.getRoute(location, params); + if (route && route.method) { + route.method.call(route.target || this, params); + } + } + }, + + getRoute: function(route, params) { + var firstRoute = this._firstRoute; + if (params == null) { + params = {} + } + + return firstRoute.routeForParts(route.split('/'), params); + }, + + exists: function(route, params) { + route = this.getRoute(route, params); + return route != null && route.method != null; + } + +}); + +/** + Event handler for the hashchange event. Called automatically by the browser + if it supports the hashchange event, or by our timer if not. +*/ +function hashChange(event) { + var loc = window.location.hash; + + // Remove the '#' prefix + loc = (loc && loc.length > 0) ? loc.slice(1, loc.length) : ''; + + if (!jQuery.browser.mozilla) { + // because of bug https://bugzilla.mozilla.org/show_bug.cgi?id=483304 + loc = decodeURI(loc); + } + + if (get(routes, 'location') !== loc && !routes._skipRoute) { + Ember.run.once(function() { + set(routes, 'location', loc); + }); + } + routes._skipRoute = false; +} + +function popState(event) { + var base = get(routes, 'baseURI'), + loc = document.location.href; + + if (loc.slice(0, base.length) === base) { + + // Remove the base prefix and the extra '/' + loc = loc.slice(base.length + 1, loc.length); + + if (get(routes, 'location') !== loc && !routes._skipRoute) { + Ember.run.once(function() { + set(routes, 'location', loc); + }); + } + } + routes._skipRoute = false; +} + /*! * MockJax - jQuery Plugin to Mock Ajax requests * diff --git a/public/spec.html b/public/spec.html index 30e4ef17..d2da8878 100644 --- a/public/spec.html +++ b/public/spec.html @@ -7,21 +7,20 @@ - -
                  diff --git a/public/sponsors.json b/public/sponsors.json new file mode 100644 index 00000000..1645c1d7 --- /dev/null +++ b/public/sponsors.json @@ -0,0 +1,135 @@ +{ + "platinum": [ + { + "url": "http://www.wooga.com", + "image": "wooga-205x130.png" + }, + { + "url": "http://bendyworks.com", + "image": "bendyworks-205x130.png" + }, + { + "url": "http://cloudcontrol.com", + "image": "cloudcontrol-205x130.png" + }, + { + "url": "http://xing.de", + "image": "xing-205x130.png" + } + ], + "gold": [ + { + "url": "http://heroku.com", + "image": "heroku-205x60.png" + }, + { + "url": "http://soundcloud.com", + "image": "soundcloud-205x60.png" + }, + { + "url": "http://nedap.com", + "image": "nedap-205x60.png" + }, + { + "url": "http://mongohq.com", + "image": "mongohq-205x60.png" + }, + { + "url": "http://zweitag.de", + "image": "zweitag-205x60.png" + }, + { + "url": "http://kanbanery.com", + "image": "kanbanery-205x60.png" + }, + { + "url": "http://ticketevolution.com", + "image": "ticketevolution-205x60.jpg" + }, + { + "url": "http://plan.io/travis", + "image": "planio-205x60.png" + } + ], + "silver": [ + { + "link": "Cobot: The one tool to run your coworking space" + }, + { + "link": "JumpstartLab: We build developers" + }, + { + "link": "Evil Martians: Agile Ruby on Rails development" + }, + { + "link": "Zendesk: Love your helpdesk" + }, + { + "link": "Stripe: Payments for developers" + }, + { + "link": "Basho: We make Riak!" + }, + { + "link": "Relevance: We deliver software solutions" + }, + { + "link": "Mindmatters: Software für Menschen" + }, + { + "link": "Amen: The best and worst of everything" + }, + { + "link": "Site5: Premium Web Hosting Solutions" + }, + { + "link": "Crowd Interactive: Leading Rails consultancy in Mexico" + }, + { + "link": "Atomic Object: Work with really smart people" + }, + { + "link": "Codeminer: smart services for your startup" + }, + { + "link": "Cloudant: grow into your data layer, not out of it" + }, + { + "link": "Gidsy: Explore, organize & book unique things to do!" + }, + { + "link": "5apps: Package & deploy HTML5 apps automatically" + }, + { + "link": "Meltmedia: We are Interactive Superheroes" + }, + { + "link": "Fingertips offers design and development services" + }, + { + "link": "Engine Yard: Build epic apps, let us handle the rest" + }, + { + "link": "Malwarebytes: Defeat Malware once and for all." + }, + { + "link": "Readmill: The best reading app on the iPad." + }, + { + "link": "Medidata: clinical tech improving quality of life" + }, + { + "link": "ESM: Japan's best agile Ruby/Rails consultancy" + }, + { + "link": "Twitter: instantly connects people everywhere" + }, + { + "link": "AGiLE ANiMAL: we <3 Travis CI." + }, + { + "link": "Tupalo: Discover, review & share local businesses." + } + ] +} + diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index e71b45eb..d6a3a9ba 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1,108 +1,1408 @@ -/* - * This is a manifest file that'll be compiled into application.css, which will include all the files - * listed below. - * - * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, - * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. - * - * You're free to add application-wide styles to this file and they'll appear at the top of the - * compiled file, but it's generally better to create a new file per style scope. - * - *= require_self - *= require_tree . - */ - -body { - font-family: Helvetica; -} - -#head { - width: 100%; - height: 40px; - font-size: 20px; - font-weight: bold; -} - -#left, #main { - float: left; -} - -#left { - width: 200px; -} - -#main { - width: 800px; - padding-left: 1em; -} - -h2 { - margin-top: 0; -} - -ul { +/* line 1, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +html { margin: 0; padding: 0; } -li { +/* line 5, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +body { + overflow-x: hidden; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + line-height: 120%; + margin: 0; + padding: 0; + width: 100%; +} + +/* line 13, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +a { + color: #333333; + text-decoration: none; +} + +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +ul { + padding: 0; + margin: 0; list-style-type: none; } -.tabs li { - float: left; - margin-right: 20px; +/* line 22, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +li { + padding: 0; } -.tab { - clear: both; - padding-top: 20px; +/* line 25, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +td, th { + text-align: left; + font-size: 80%; + padding: 5px 10px; + vertical-align: top; } -.github-stats { - float: right; - width: 100px; -} -.github-stats li { - float: left; - margin-left: 20px; -} - -.summary { - display: inline-block; -} -.summary .left, -.summary .right { - float: left; - width: 350px; -} - -dt { - clear: both; - float: left; - width: 60px; -} -dd { - float: left; -} - -/* .green { */ -/* border-top: 5px solid lightgreen; */ -/* } */ -/* .red { */ -/* border-top: 5px solid red; */ -/* } */ - -#jobs, -.log { - clear: both; - padding-top: 20px; -} -table { - clear: both; - margin-top: 20px; -} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ caption { text-align: left; + font-size: 16px; + font-weight: bold; + color: #666666; +} + +/* line 37, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +pre { + background: none repeat scroll 0 0 #fafafa; + border: 1px solid #dddddd; + border-radius: 8px 8px 8px 8px; + font-family: monospace; + font-size: 13px; + line-height: 1.5em; + margin-top: 1em; + overflow-x: scroll; + padding: 1em 1.5em; +} + +/* line 48, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +pre::-webkit-scrollbar { + height: 10px; + width: 10px; +} + +/* line 52, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +pre::-webkit-scrollbar-button:start:decrement, +pre::-webkit-scrollbar-button:end:increment { + display: none; +} + +/* line 56, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +pre::-webkit-scrollbar-track-piece { + background: #444444; + -webkit-border-radius: 4px; +} + +/* line 60, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +pre::-webkit-scrollbar-thumb:horizontal { + background: -webkit-gradient(linear, left top, left bottom, from(#85888e), to(#55585e)); + -webkit-border-radius: 4px; + width: 25px; +} + +/* line 65, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +#flash-messages { + position: absolute; + left: 400px; + top: 10px; + font-size: 25px; + color: white; +} + +/* line 72, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.display { + display: block !important; +} + +/* line 75, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.emoji { + vertical-align: middle; + width: 20px; + height: 20px; +} + +/* line 80, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.help { + display: inline-block; + height: 19px; + width: 16px; + margin: -9px 0 0 4px; + vertical-align: middle; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BPaK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjhVbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOmPfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36IxpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRIrVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYugTmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWXdgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hqg4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1knFilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLUR6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC') no-repeat scroll 0 3px transparent; + cursor: pointer; +} + +/* line 89, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.context_help_caption { + text-align: left; + font-size: 16px; + font-weight: bold; + color: #666666; + border-bottom: 1px solid #cccccc; +} + +/* line 96, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.context_help { + display: none; +} + +/* line 99, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +.context_help_body { + font-size: 1em; + line-height: 1.429; + margin: 1.429em 0; +} + +/* line 105, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +#facebox .content { + display: block !important; +} +/* line 107, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +#facebox .close { + display: none; +} +/* line 109, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */ +#facebox pre::-webkit-scrollbar { + height: 0; + width: 0; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left.sass */ +body#home { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbQAAAAFCAIAAACit451AAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAXUlEQVRYCe3UsQ0AMQhD0csJCdEg9p+LWahTpWYAf7eueEg+M/MRBBBAQFKgu6sqMyPC3c3svPySIByNAAIILAKM4wJEjQACmgKMo+bfuRoBBBYBxnEBokYAAU2BCx/IBgej7Rj6AAAAAElFTkSuQmCC') repeat-y -27px top; +} + +/* line 6, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left.sass */ +#left { + position: absolute; + z-index: 10; + width: 400px; +} +/* line 11, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left.sass */ +#left #search_box { + height: 90px; + padding: 30px 20px 0 20px; + background-color: #e5e8ee; +} +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left.sass */ +#left #search_box input[type=text] { + height: 28px; + width: 97%; + padding: 0 0 0 10px; + font-size: 10pt; + color: #666666; + border: 1px solid #dddddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + background: white url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAIAAAASSxgVAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAABTUlEQVQYGU2Qy8qCUBSF/2NWJiE4KO0CRg0MRNEwfI3eIJ8o38VniFRqVKMmXYiIwAYNxKKL/5Lscgae5drfWWfvQ5Ik+Xuv0+k0nU7n8/l2u5UkSVVVy7J4nicfKAxD13V9338fSXdAg8GAfllAgyAA0Wq1TNNst9ur1Wo2m8EURfELLRYLQgiO9vv9QqFQqVRyudxms4FPfZJ2ux3yNE1jWZZhmHK5DI0q/C/UbDZhLZdLmk7jEQMNAT+D8NPpdPAdj8ee58VxPJlMoOF0u92spyiKcDes9XqNliFeq9frGYaRQufzeTQaHY/HarWqKAq4/X7faDRkWdZ1vVar0SAcxzkcDhh1OBxyHPd4PO73ez6fLxaLpVIJk9KXy+V6vQqCYNt2vV5H7fW8eA6KSjuGIIDSISkKsZgcTtbOz0aez+ftdkMNGT/+VwL4ByFknYU4StqkAAAAAElFTkSuQmCC') no-repeat 335px 8px; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li { + position: relative; + font-size: 16px; + overflow: visible; + padding: 15px 25px 15px 45px; + border-bottom: 1px solid #cccccc; + background-position: 24px 16px; + background-repeat: no-repeat; +} +/* line 12, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li:nth-child(odd) { + background-color: white; +} +/* line 14, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li:nth-child(even) { + background-color: #f6f6f6; +} +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li.green a { + color: green; +} +/* line 19, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li.red a { + color: #cc0000; +} +/* line 22, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li .last_build { + float: right; +} +/* line 25, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li .summary { + margin: 5px 0 0 0; + font-size: 13px; + color: #666666; +} +/* line 30, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li .description { + margin: 5px 0 0 0; + font-size: 13px; + color: #666666; + display: none; +} +/* line 36, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li .indicator { + display: none; +} +/* line 39, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li.selected .indicator { + display: block; + position: absolute; + top: 0px; + right: -17px; + width: 17px; + height: 100%; + background: no-repeat center left; +} +/* line 48, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li.loading { + font-size: 13px; + color: #999999; + background-color: white; +} +/* line 53, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/left/repositories.sass */ +#repositories li.loading p { + display: inline-block; + margin: 0 0 0 -10px; + padding-right: 25px; + background: url('data:image/gif;base64,R0lGODlhEAAIAPMHAP///+vr66CgoN7e3rW1tYuLi/X19Wtra3t7e87OzsbGxqGhodfX142NjZaWlqurqyH/C05FVFNDQVBFMi4wAwEAAAAh/hoiQ3JlYXRlZCB3aXRoIENoaW1wbHkuY29tIgAh+QQACgD/ACwAAAAAEAAIAAADKXiq0P7glHmglRSMPUDgBlZUQ/B5ZhBOo2Z2qSqSL2qumaEbwK7PFkgCACH5BAAKAP8ALAAAAAAQAAgAAAQwsKCJwLkH6F2Er0dRZJvWfZaYBUNrnAKoAkEdvF6cjrSNoyGe7QaT8QxIpISyI5UiACH5BAAKAP8ALAAAAAAQAAgAAAQvcIkpALoInL0F+Y41ZUdhHh4oCqRZoB8RIqPmwirN2mcqr61ebFYrnSQUC4b3igAAIfkEAAoA/wAsAAAAABAACAAABDAQyCmqACijQpYnQEMQDWZxSgqKpFmhajiWyEmkyjq7ApzLrdqr8wHSThOKBaMpRAAAIfkEAAoA/wAsAAAAABAACAAABDMQyEmBuGKxxBl4y/IADmEKzKAmwMItpEmg6sC6CVye6dq+MV7tBtzNNp1PaGQUVJ6YTAQAIfkEAAoA/wAsAAAAABAACAAABC8QyEmrBSknQJYnxiAGgCIqnKKCQUuaA0qoCuuWZ7oa7pvPO4PQgNFwPAvCZQmIAAAh+QQACgD/ACwAAAAAEAAIAAAEKRDISau1LGlmhg+A5wGJyAUoOKADaRqpyrremYZzWRs8D/QGQGZzKQIiACH5BAAKAP8ALAAAAAAQAAgAAAMhCLrc/iyMGcCcQNLAueVD1o3eAIpk90koZ7wvABvyDEEJADs=') no-repeat right 6px; +} +/* line 1, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main.sass */ +#main { + position: relative; +} + +/* line 5, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main.sass */ +#home #main { + min-height: 1000px; + padding: 20px 270px 30px 430px; +} +/* line 9, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main.sass */ +#home #main.loading { + opacity: 0.1; +} +/* line 12, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main.sass */ +#home #main.maximized { + padding: 60px 100px 30px 440px; +} + +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main.sass */ +#stats #main, +#profile #main { + width: 600px; + padding: 20px 0 0 0; + margin-left: auto; + margin-right: auto; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list { + width: 100%; + margin: 25px 0 0 0; + border-spacing: 0; +} +/* line 8, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list caption { + margin-left: 12px; + margin-bottom: 8px; +} +/* line 12, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list tr { + max-height: 20px; +} +/* line 15, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list th { + font-size: 13px; + color: #666666; + white-space: nowrap; + border-bottom: 2px solid white; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list td { + white-space: nowrap; + border-bottom: 2px solid white; +} +/* line 24, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list td.message { + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list td:first-child { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} +/* line 32, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/list.sass */ +table.list td:last-child { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} +/* line 4, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#main .sponsor { + font-size: 13px; + color: #999999; +} + +/* line 8, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log { + clear: left; + white-space: pre-wrap; + word-wrap: break-word; + line-height: 140%; + font-size: 90%; + margin-top: 25px; + padding: 15px 0; + color: white; + background-color: #333333; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log p { + position: relative; + padding: 0 15px 0 50px; + margin: 0; + min-height: 16px; +} +/* line 26, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log p:hover { + background-color: rgba(255, 255, 255, 0.05); +} +/* line 28, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log p.highlight { + background-color: rgba(255, 255, 255, 0.5); +} +/* line 30, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log p a { + position: absolute; + margin-left: -40px; + cursor: pointer; +} +/* line 35, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .fold { + height: 16px; + overflow: hidden; + cursor: pointer; +} +/* line 39, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .fold.open { + height: auto; +} +/* line 42, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bold { font-weight: bold; } +/* line 44, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .italic { + font-style: italic; +} +/* line 46, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .underscore { + /* monochrome displays only according to http://ascii-table.com/ansi-escape-sequences.php */ +} +/* line 49, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .black { + color: black; +} +/* line 51, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .red { + color: red; +} +/* line 53, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .green { + color: lime; +} +/* line 55, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .yellow { + color: yellow; +} +/* line 57, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .blue { + color: blue; +} +/* line 59, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .magenta { + color: magenta; +} +/* line 61, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .cyan { + color: cyan; +} +/* line 63, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .white { + color: white; +} +/* line 65, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .black.bright { + color: #999999; +} +/* line 68, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-black { + background-color: black; +} +/* line 70, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-red { + background-color: red; +} +/* line 72, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-green { + background-color: lime; +} +/* line 74, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-yellow { + background-color: yellow; +} +/* line 76, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-blue { + background-color: blue; +} +/* line 78, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-magenta { + background-color: magenta; +} +/* line 80, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-cyan { + background-color: cyan; +} +/* line 82, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/log.sass */ +#log .bg-white { + background-color: white; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository { + position: relative; +} +/* line 6, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository h3 { + margin: 15px 60px 0 0; +} +/* line 8, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository h3 a { + font-size: 24px; + line-height: 24px; +} +/* line 12, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository a { + color: #666666; + text-decoration: underline; +} +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .description, #repository .language { + font-weight: normal; + font-size: 13px; + color: #999999; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .sync { + font-weight: normal; + font-size: 13px; + color: #999999; + float: left; + padding-right: 25px; +} +/* line 28, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .language { + padding-right: 5px; +} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .github-stats { + position: absolute; + top: 0; + right: 0; +} +/* line 35, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .github-stats > * { + float: left; +} +/* line 37, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .github-stats a { + height: 16px; + display: block; + font-size: 12px; + font-weight: bold; + text-decoration: none; + margin-left: 10px; + padding-left: 20px; + background: no-repeat 0px 2px; + color: #999999; +} +/* line 47, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .github-stats a.watchers { + background-image: url('data:image/png;base64,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'); +} +/* line 49, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */ +#repository .github-stats a.forks { + background-image: url('data:image/png;base64,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'); +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary { + margin: 0 0 0 12px; + color: #666666; + font-size: 80%; + overflow: hidden; + *zoom: 1; +} +/* line 9, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary .left, +#summary .right { + float: left; +} +/* line 13, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary dt, #summary dd { + float: left; + min-height: 25px; + margin: 0; +} +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary dt { + clear: left; + width: 90px; +} +/* line 20, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary dd { + width: 150px; +} +/* line 22, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary > dd { + width: 80%; + min-width: 315px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */ +#summary .message { + white-space: normal; + min-width: 0; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools { + position: relative; + float: right; +} +/* line 6, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools a { + display: block; + width: 39px; + height: 21px; + margin-top: -27px; + background: url('data:image/png;base64,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') no-repeat; + cursor: pointer; +} +/* line 14, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools .pane { + display: none; + position: absolute; + z-index: 400; + top: -1px; + right: 0; + width: 600px; + padding: 10px 20px; + border: 1px solid #cccccc; + background-color: #f2f4f9; + font-size: 80%; + color: #666666; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.1); + box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.1); +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools .pane p { + margin: 10px 0; +} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools .pane p label { + width: 80px; + display: inline-block; +} +/* line 34, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/tools.sass */ +#tools .pane p input { + border: 1px solid #dddddd; + width: 510px; + padding: 4px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} +/* line 4, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile a { + text-decoration: underline; +} +/* line 7, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile img { + float: left; + margin: 3px 15px 0 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 12, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile dl { + margin: 0 0 20px 18px; + color: #666666; + font-size: 13px; +} +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile dt { + display: block; + float: left; + width: 50px; +} +/* line 22, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile dd { + clear: right; +} +/* line 25, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile #welcome { + margin-top: -35px; + margin-bottom: 35px; + font-size: 13px; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile #welcome h4, #profile #welcome p { + margin-bottom: 4px; +} +/* line 32, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile p.notice { + background-color: #a8eb75; + padding: 10px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 36, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile p.notice a { + text-decoration: underline; +} +/* line 38, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile p.notice small { + font-size: 13px; + display: block; +} +/* line 42, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile p.tip { + font-size: 13px; + margin-top: -10px; +} +/* line 46, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile.sass */ +#profile .highlight { + color: #c7371a; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks { + margin-top: 10px; +} +/* line 7, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li { + position: relative; + height: 19px; + padding: 10px; + white-space: nowrap; + overflow: hidden; + border-bottom: 1px solid #dddddd; +} +/* line 15, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li:nth-child(3) { + border-top: 1px solid #dddddd; +} +/* line 18, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li:nth-child(odd) { + background-color: #fafbfc; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li:nth-child(odd) .controls { + background: #fafbfc; +} +/* line 24, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li > a { + float: left; + font-size: 16px; + color: #666666; + text-decoration: none; +} +/* line 30, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .description { + display: none; + margin-left: 10px; + font-size: 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #999999; +} +/* line 39, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .controls { + position: absolute; + top: 10px; + right: 0; + white-space: nowrap; + background: white; +} +/* line 45, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .controls a { + float: left; + display: block; +} +/* line 49, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .github-admin { + position: relative; + height: 20px; + width: 20px; + padding-right: 0; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKQWlDQ1BJQ0MgUHJvZmlsZQAAeAGdlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/ul8iYiAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrlPw1BAAABL0lEQVQ4EaWTsYuDUAzG89RVcBJ00IKCi0uXCv7pndwdHKxQq9AqpQ5uuikl58uhnNfrO6EOUZJ8P/O+KENE+OSSPhFz7WZAWZZ4PB6xruvVyJsAeZ5jHMdgGAZYlsV+Tr0JcL1eSWOa5qKtqoomUZaM4OH5fFK1KAoYhgHbtoX7/Q62bcO/gCzLsO97AvBJ5mkOhwPlhIDT6YRpmlIjYww0TQNZlmG324HjOOTFW0AURdg0DYl58DwP9vv9ykCeXwHO5zNfE4zjCF3X8TrwN4dh+OI+FaewACaDMEmSOU93RVEgCIK3Yt60AC6XC/i+D7quk1HcLFVVheIVgIuntdAZJUnC2W0aRRCWD2kW897H40ES13UF0u8S+/033m435MeZ1rSsSkR5AYia/6p9AbuUdipSxvobAAAAAElFTkSuQmCC') no-repeat 3px 4px; +} +/* line 58, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .switch { + height: 20px; + width: 80px; + margin-left: 10px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAYAAAAwaEt4AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sGEwoDBFgWWZEAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAEcUlEQVRYw81YTUvrTBR+ZjJp2lhjFaF+LESpXKQUxYW4UHBRUBF3gguX/in/hEtXIhQRRANWlIILFXTR+oWKpm1Kkpl38TIhkURvudd6D5TQfMyc88xznnNmSL1eF0dHR3AcB4ZhQAiBdowQEnk/OA4hBEIIOI6DSqWCRqOBVCrV9lzBcSmlkXO1a9J/QgharRbGxsZQLBZB9vb2RCaTgWEY8DwP32mUUiQSCZTLZVBKkU6n/yio7zDLssAYA3t5ecHIyMi3gwIAnHO0Wi3kcjlUq1UMDg7iXzNKKcrlMpiqqiCEgFIKIURsavztyRlj0HX9nwJFCAHGGLq7u8Gko50CRc4nwYnLe86578/HdJOaFbx+fBYM9mNccbEKIaAoClRVBZNOdjLX5ZxBAY1yUAZAKfUD4Zz71+D9YLoGFzoOgCCwQVMU5f9FC6ZRp0w6rChKLDCEELiui+vra5imidfXV2iahkKhgEKhgGQyCdd1cXJygvf39xDDVFXF7OwsTNOEbduhcT3Pw8LCApLJZCSTfDZTSmMd/C6TqxK1YsESenh4CNM00dPTg4mJCTw/P6NUKuHm5gbr6+totVq4urrC09OT32oQQpBIJAAAFxcXsG0buq77i+84DjzP8+eXDJTzhoChlIZe6ARb4mgu7f39HWdnZ+jt7cXm5qafIqVSCaZp4vz8HL9+/YKqqqCUYmNjA4lEwgcnmUxCVVUoioK1tTUYhhHSpDh9kuD4qdQp1ki6BhurKEbd3t6i0WigWCyCMQbOOYQQmJycRKVSQaVSQT6f94Or1Wo+U1KpFIaHhyGEAOcc9/f3aDab4JwjnU4jk8lECnUwxX8klTjn0DQN6XQ6llWO40AIgaGhIaRSKZ/RrutC13VYloV0Ou0L+Pb2ti/sk5OTGB8fB6UU9XodOzs74JzD8zzMz89jaWkpMkM452CMQdO0n6lKkhVR5VpWpO7ubhBC8Pr6itHR0RAwjUYD2Ww2xLzNzU1/vFQq5YOk6zpWVlZ8DZJ6E1cRpV8/UpUURYnVGCmIY2Nj0HUdBwcHGB8fh2EYcF0Xp6ensCwLi4uLvs9CCAwPD/vMkvelLg0MDKC/vz/0flyay1Rnn5XN79SYz5wkhCCTyWB6ehpHR0fY2tpCX18f6vU67u/vkcvlMDU1Bdd1Q0LqeV5k88Y5DwH2VWEIVaWfYkxcZaKUYnV1FV1dXTg+PkatVgMATE1NYXl5GYwxuK4LRVGgaVrkrlvTNP+dr6pgsH+ilILs7++LmZmZjmwipTWbTVSrVeTz+S+PF2QHbFkWEomED4L8SbbLChTcRshnv9uKyG8uLi5+po8JBvOVeZ4HQgi6urpC/+W3ckGj9lXtLnaQdazZbH6q0t8BjOd5fvf7JwdLv3to1i4wjUYDzLZtPDw8IJvNdgQYx3FweXmJfD7fsd18O6Dbto23tzcQ27bF7u4uent7I0/UPtv6f3acGaX2nufh8fERQ0NDMAzjr6xy3H6r3e9lz3R3d4e5uTn8B4YdbMcCfa97AAAAAElFTkSuQmCC') no-repeat; + cursor: pointer; +} +/* line 64, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li .switch.active { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAIAAAC/CtwvAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sGEwoEM6/qalkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAFD0lEQVRYw71Xa4+dUxR+nrX2+75nzpw5bV1myrTaaolqiioZSlGtS1IiGpdIRAiCfyA+8EEI0YiEL+IagiC0aVqkbpXekGipuNUoU21ppy3nTM+c27v38uF0BnHOBD3tyv603/0+e69nrfXstfl7sfTI06ufW9F/wBIcGTOE4BLsu+Lc7usWnjRhXAd8gPD/A5JmLJVKkYv6+s7ivY+/+9jb1Xw+QxwpMwtDe++4vHrzFedUTX09JcRghwZKFanV/cDAgHv143TKrLM1NWMAeGQ8yg1/eencznLdmaUAD9kfAOaDj2OX1lOH5Ni4YzytDs+WHjV2bGxNwgAYCBgb8zSCZkZgZNpa8mMhqJfIZSgQaBvJEmGcOKdKEdKUHINXmFgIkYsiAQCkwRCGSUcLwYlYHNKyowQYKSZqviqQpmhB4ERSERG2ITx/qykB6CAEzQLJVsRaKnRMpLxz+ycv14q/WHbcpJnXZLpPNV9Kg68OfFGpHpgwbUGwYCLV37aV9n0zYfL5SMah6ZENMJAQEZi1NUoiIk5IM46FbRALfsd702TNI3cvnjq5d3D/78+/sWLdtm8y065OWLzq1N2d7sDyr1dXJl4qFub07J97yr6Vu4b2Y/wYURCKqloI7XWJpKMKBAhjpABR2X3bItx5w/17Sty4Ncya2vPEw6e9uWrNPSu/nzZ98u23LDlugutZvv7RjQXJjJvXN+v2hfPWLh0YLJo2S70AGCFCpZqyrS5pI1CCYHYwHZoMECfkh266su/X3/yVDxUfXOavf5KrPh9asvii83p31oLU6sHMX3PZnInlt+Ain9qoojQHbPAkDU7baQ1EEVEzgwHGpkcIhjOn57K5jqUry2V0eaaactmnrm7+xksm1WoeMG/4sZA8cOuc4R8/oro/ZbIFT2YmVFXRdhtJ15llR95oJOtN5SEYpvZ2Abpzz56e8bEAQEqtDBX9ib3H5bMUgQ/hxbWVB689864F7xT29gNnZLN2tKTKJukcQojqKiqiysMhD7nYZzMePqXETQUqGINlAJnI/qrrFUm9hVy6I+Om7PSZXFIkBXCfDXDL9uqt187/cOMmAJ2OuUSUoZlLQFyhNs5gbZcHITMqqs6petXwz+Gc/26QQFhyXs8vm1/YvnXDvi2rZuV+znbmP+j3mUhpwQATfWp9zTRz+YL5gIlaK0BVi+AEVCfttYOJ5xKJHBAEbEnYjoKs+6E6v2/2s13Jtz/9OvX42XNOP+mrXfVN/cjFCU28IRv5XQV9ZcPwLRd2ARabRirSDNMICp0kbU+8Rjm5SBkJII0+hy1aGHtmDQsH/MUzZ544Y0ZKt/Z7e2n9MBKRTL3scrk0VZV8HK3dxrkzhmf3Rq77mHgQ0qy/DoQXQExEDkstOYfIEcHQon8BALFAe/1TXb65lOuIa7VyscIoiiKxciVz32s1I4/KCX1qKktXmbd6HLvYNb9GA8WUB0Xc2nsvCUinURyLmHoEGfONA2YMSCpVEFFXZjTYiLMjPzoAiDo4wk6LHi/AK9Wg6sz7tvZ4AOEkrURqdVL/wyPskKgNgarZUK+QoEg7a0mkUqm57tqXwza508VAGO27/3T6sLyXpJrrfn/T1psnHes6j0Ljoj/kJyBgQ0OlYqHAvfsLj768brc/Gdl8QyHMwl96dTu4/J8A/31m9ItPFcO7pucHF80eHyVQ0kaKiiNE2r9QjtHFwVitVguF4gXz5/0BdY9rLIx0cN8AAAAASUVORK5CYII=') no-repeat; +} +/* line 68, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li:hover > a { + color: #c7371a; +} +/* line 71, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/profile/hooks.sass */ +#hooks li:hover .description { + display: inline; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right { + position: absolute; + display: block; + top: 0; + right: 0; + min-height: 100%; + width: 205px; + padding: 20px 20px 20px 10px; + background-color: #f2f4f9; + border-bottom: 1px solid #cccccc; + font-size: 13px; +} +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right h4 { + margin: 25px 0 0 0; +} +/* line 19, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right ul { + margin-top: 10px; +} +/* line 22, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right .box { + margin-top: 25px; + padding: 15px; + border: 1px solid #cccccc; + background-color: white; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right .box h4 { + margin: 0; +} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right .box a { + text-decoration: underline; +} +/* line 33, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right .box li { + list-style-type: square; + margin-left: 15px; +} +/* line 37, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right #alpha_warning { + background-color: #ffffda; +} +/* line 40, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right #alpha_warning h4 { + padding-left: 20px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAACXBIWXMAAAsTAAALEwEAmpwYAAACLUlEQVQoFY1STWsTURQ9d+bNJNOYJmnSNKaIlC5KSpVSNFGzaeuipeBG3bkNlip0LQXB7NwVERd+/Aqhfm2liwraaGrVQtAuikSbalIwmTQzz/tiBTtR8MIb3tx3zrvn3PtISglvEMd6DncAjYYfuFcY0wESXpL6fzKOwWgQOZ1cLKWxyKkNL+6vREyeH9ejZQPSxZ4Rm/hvYv3E3HRlOAXbbqJWeD3NxLveipo3kcsv9hj+Q9mWq8GBDsMKnp7N34t5cR1SJ9ZuZZJHPiZ87ihM9nh082Vf+tWzDHB56U9yB7GnsTnV/+Y2rLeAEQQi34DyLqaYdIB4QGqeyPTrOAuC6gvUEDQT8AtMzhD5/lmxdv1mquFfG2q4q9AaFbiWRN2KoH7y2NBIdjTFxMJv8r5Uop159B9O5i846Vnjc3cXDNlkjETNBuxKVYSLLy6uzNB25jG2WIpsS91dwCnbRjFR3ViAJuCwvj0zhKYRhquzQl0g9OXDNXZQLF3CGVW1XdHVcc6RCEfWH6I35kAMZiEDfSC+VtS24Hu/DO3dUx0+hImxzFsmeYPPBFZ+bGOsVAJ6Q0AXFxFC8AzVa22hugN8KgMDA0A4idVQHBmy7yMlGyjwuVn/yn5qfF+LCdxRnTuq+8Fyf+2tOEABNFn9mCBLu2rGXRPcC1O9D0XkUONQQcoMm0M3rwAvC6bT1ObF80fuSCLKZxq1PRFXUjhSn/1QXtlbe64qXf4uj/8EGPmtIwXAubMAAAAASUVORK5CYII=') no-repeat top left; +} +/* line 44, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right.sass */ +#right #alpha_warning p { + margin-bottom: 0; + color: #666666; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/github.sass */ +#github { + display: block; + position: absolute; + top: 0; + right: -70px; + width: 250px; + padding: 3px 0; + border-top: 2px solid #ef9f4c; + border-bottom: 2px solid #ef9f4c; + background: #ef7600; + color: white; + text-align: center; + text-decoration: none; + font-size: 13px; + font-weight: bold; + line-height: 19px; + letter-spacing: -1px; + text-shadow: 0 0 10px #522600; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: rgba(0, 0, 0, 0.5) 1px 1px 10px, rgba(0, 0, 0, 0.07) 0 0 3px 1px inset; + -moz-box-shadow: rgba(0, 0, 0, 0.5) 1px 1px 10px, rgba(0, 0, 0, 0.07) 0 0 3px 1px inset; + box-shadow: rgba(0, 0, 0, 0.5) 1px 1px 10px, rgba(0, 0, 0, 0.07) 0 0 3px 1px inset; +} +/* line 1, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li, +#queues li { + color: #666666; + white-space: nowrap; + overflow: hidden; + margin: 0; + list-style-type: none; +} +/* line 9, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li h5, +#queues li h5 { + font-size: 13px; + font-weight: normal; + margin: 0px; + cursor: pointer; +} +/* line 15, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li ul, +#queues li ul { + margin-top: 2px; + margin-bottom: 5px; + padding-left: 1px; + display: none; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li.open ul, +#queues li.open ul { + display: block; +} +/* line 24, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li .icon, +#queues li .icon { + clear: left; + float: left; + width: 8px; + height: 8px; + margin: 6px 6px 0 0; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCRkI5RUU0MzQzMTFFMEIyNjY5REVFMEM3Qjc3NUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCRkI5RUY0MzQzMTFFMEIyNjY5REVFMEM3Qjc3NUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MURBN0Q0RDQzNDMxMUUwQjI2NjlERUUwQzdCNzc1RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5MURBN0Q0RTQzNDMxMUUwQjI2NjlERUUwQzdCNzc1RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiEmX8AAAAFTUExURXvfR3DXP2vUOGfSNYPjT1zJKm/XPIfnVWfRNXfcRIHiTnneRmjSNX7gSWzUOG/WO2jSNm/XPnTZQYDhTGTPMYbmVGbRNHHYQIXlUYXjUHjeRoPjUG/WPIHiT3/hTGjTNmHNLoTjT3bcRH/hSn/hS4XlU1vIKV3KK4TkUITkUYroV2zUOmbRNXfdRWPNMHvfSGrUN3PZQGzVOXzeR1nGJl7KK23VOmbRM2rTN4fmVVzIKV3LLGXPMXHYP3XZQWDLLHneR3veRlrHJ1zHKGrTNnXbQ4XkU4blVGfRNGXQMnXaQWDMLWbQM3PYQGLNLl7LLGrSN27WPGXQNHbaQnzgSWXPMnjcRIHjT2vTOF7KLG7XO2DLLWHMLXHXP33hSXjdRXndRXjdRnfbQ2fSNGjRNVrHKGHMLmLNL27WO4DhTWPOMITlU33hSnbbQ3PZQWTPMmzUOVaNkeEAAADwSURBVHjaDIxTdwNhFADv2sg6bpzaRmrbdtf4/v9T93XOzIBrWFP++vE9tPQqWSR58DJCvrJvSlKbH44OnCIMZSIqpIkQB6RjMstRbqiITrmtOCh3mBGmA+dHvzloCrFORiZjRnnygyv23pdUq/b3I6cPrjGG+9jGOMT6Q7nR4MENry9H8+vHZFwLgqANA2+NzRUt+YTbVvwuQc8NLRVV3rSEE2ZhswTUhZexuzPPWKol31wzgZXeSZixdeTT2Nl0mtqwQ8274d2h+rjgK5UCrcB2l3p6nTBO2foSLiMkw9xfl1p98cJs0SJEkSD+BRgAO8wzFCijcvMAAAAASUVORK5CYII='); +} +/* line 34, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li.waiting .icon, +#queues li.waiting .icon { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCRkI5RUU0MzQzMTFFMEIyNjY5REVFMEM3Qjc3NUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCRkI5RUY0MzQzMTFFMEIyNjY5REVFMEM3Qjc3NUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MURBN0Q0RDQzNDMxMUUwQjI2NjlERUUwQzdCNzc1RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5MURBN0Q0RTQzNDMxMUUwQjI2NjlERUUwQzdCNzc1RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiEmX8AAAAFTUExURXvfR3DXP2vUOGfSNYPjT1zJKm/XPIfnVWfRNXfcRIHiTnneRmjSNX7gSWzUOG/WO2jSNm/XPnTZQYDhTGTPMYbmVGbRNHHYQIXlUYXjUHjeRoPjUG/WPIHiT3/hTGjTNmHNLoTjT3bcRH/hSn/hS4XlU1vIKV3KK4TkUITkUYroV2zUOmbRNXfdRWPNMHvfSGrUN3PZQGzVOXzeR1nGJl7KK23VOmbRM2rTN4fmVVzIKV3LLGXPMXHYP3XZQWDLLHneR3veRlrHJ1zHKGrTNnXbQ4XkU4blVGfRNGXQMnXaQWDMLWbQM3PYQGLNLl7LLGrSN27WPGXQNHbaQnzgSWXPMnjcRIHjT2vTOF7KLG7XO2DLLWHMLXHXP33hSXjdRXndRXjdRnfbQ2fSNGjRNVrHKGHMLmLNL27WO4DhTWPOMITlU33hSnbbQ3PZQWTPMmzUOVaNkeEAAADwSURBVHjaDIxTdwNhFADv2sg6bpzaRmrbdtf4/v9T93XOzIBrWFP++vE9tPQqWSR58DJCvrJvSlKbH44OnCIMZSIqpIkQB6RjMstRbqiITrmtOCh3mBGmA+dHvzloCrFORiZjRnnygyv23pdUq/b3I6cPrjGG+9jGOMT6Q7nR4MENry9H8+vHZFwLgqANA2+NzRUt+YTbVvwuQc8NLRVV3rSEE2ZhswTUhZexuzPPWKol31wzgZXeSZixdeTT2Nl0mtqwQ8274d2h+rjgK5UCrcB2l3p6nTBO2foSLiMkw9xfl1p98cJs0SJEkSD+BRgAO8wzFCijcvMAAAAASUVORK5CYII='); +} +/* line 37, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li.errored .icon, +#queues li.errored .icon { + background: url('data:image/png;base64,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'); +} +/* line 40, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/lists.sass */ +#workers li.stopped .icon, +#queues li.stopped .icon { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAIAAABiEdh4AAADHmlDQ1BJQ0MgUHJvZmlsZQAAeAGFVN9r01AU/tplnbDhizpnEQk+aJFuZFN0Q5y2a1e6zVrqNrchSJumbVyaxiTtfrAH2YtvOsV38Qc++QcM2YNve5INxhRh+KyIIkz2IrOemzRNJ1MDufe73/nuOSfn5F6g+XFa0xQvDxRVU0/FwvzE5BTf8gFeHEMr/GhNi4YWSiZHQA/Tsnnvs/MOHsZsdO5v36v+Y9WalQwR8BwgvpQ1xCLhWaBpXNR0E+DWie+dMTXCzUxzWKcECR9nOG9jgeGMjSOWZjQ1QJoJwgfFQjpLuEA4mGng8w3YzoEU5CcmqZIuizyrRVIv5WRFsgz28B9zg/JfsKiU6Zut5xCNbZoZTtF8it4fOX1wjOYA1cE/Xxi9QbidcFg246M1fkLNJK4RJr3n7nRpmO1lmpdZKRIlHCS8YlSuM2xp5gsDiZrm0+30UJKwnzS/NDNZ8+PtUJUE6zHF9fZLRvS6vdfbkZMH4zU+pynWf0D+vff1corleZLw67QejdX0W5I6Vtvb5M2mI8PEd1E/A0hCgo4cZCjgkUIMYZpjxKr4TBYZIkqk0ml0VHmyONY7KJOW7RxHeMlfDrheFvVbsrj24Pue3SXXjrwVhcW3o9hR7bWB6bqyE5obf3VhpaNu4Te55ZsbbasLCFH+iuWxSF5lyk+CUdd1NuaQU5f8dQvPMpTuJXYSWAy6rPBe+CpsCk+FF8KXv9TIzt6tEcuAcSw+q55TzcbsJdJM0utkuL+K9ULGGPmQMUNanb4kTZyKOfLaUAsnBneC6+biXC/XB567zF3h+rkIrS5yI47CF/VFfCHwvjO+Pl+3b4hhp9u+02TrozFa67vTkbqisXqUj9sn9j2OqhMZsrG+sX5WCCu0omNqSrN0TwADJW1Ol/MFk+8RhAt8iK4tiY+rYleQTysKb5kMXpcMSa9I2S6wO4/tA7ZT1l3maV9zOfMqcOkb/cPrLjdVBl4ZwNFzLhegM3XkCbB8XizrFdsfPJ63gJE722OtPW1huos+VqvbdC5bHgG7D6vVn8+q1d3n5H8LeKP8BqkjCtbCoV8yAAAACXBIWXMAAAsTAAALEwEAmpwYAAACK2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpfm+dxAAAA1ElEQVQoFU3RgXKEUAhDUd367f61ted5Z6nMiCEkgLv7eZ4/T3yeAL1jtm2Dy79P3Pd97PuOEoBIHS7nqbUMIx0qRh5p2I4F6PgmKuUBbyfZx4PSfuf8mKLZ4XWSmA2DB2i1jQ0+PMvxLMmmQSH7hmZnqHvUfvfgcfbdlTLx2hCaqZVyg1suUyPX/+Al1O2BtWcPLBqn9X/SMn1t13XB6Ugfy3dDgyliZdIR2aM1V+iun5UH1VRqohRdSFCZcp1UA4uaUGop4yuNOzpGLVJ30puBkcUfoaEkp6ZhK30AAAAASUVORK5CYII='); +} +/* line 5, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#slider { + position: absolute; + height: 100%; + top: 0; + left: -10px; + width: 10px; + border-left: 1px solid #cccccc; + border-bottom: 1px solid #cccccc; + background-color: #f2f4f9; + cursor: pointer; +} +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#slider .icon { + width: 0; + height: 0; + position: absolute; + top: 15px; + border-color: #f2f4f9 #f2f4f9 #f2f4f9 #999999; + border-width: 5px 0 5px 5px; + border-style: solid; + margin-top: -5px; + margin-left: 3px; +} +/* line 27, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#slider:hover { + background: #e1e2e6; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#slider:hover .icon { + border-color: #e1e2e6 #e1e2e6 #e1e2e6 #999999; +} + +/* line 33, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #top .profile { + margin-right: 10px; +} +/* line 36, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #main { + padding-right: 40px; +} +/* line 39, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #right { + width: 0; + padding: 0; +} +/* line 42, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #right *:not(#slider):not(.icon):not(.ember-view) { + display: none; +} +/* line 45, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #slider { + left: -20px; + width: 20px; + z-index: 50; +} +/* line 49, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #slider .icon { + border-color: #f2f4f9 #999999 #f2f4f9 #f2f4f9; + border-width: 5px 5px 5px 0; +} +/* line 54, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/slider.sass */ +#home.maximized #slider:hover .icon { + border-color: #e1e2e6 #999999 #e1e2e6 #e1e2e6; +} +/* line 5, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors.top { + height: 140px; +} +/* line 8, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors.top li { + overflow: hidden; + width: 205px; + margin: 0 0 8px 0; + border: 1px solid #dddddd; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + -ms-border-radius: 8px; + -o-border-radius: 8px; + border-radius: 8px; + list-style-type: none; +} +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors.top a { + overflow: hidden; +} +/* line 19, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors.top img { + z-index: 200; + overflow: hidden; + width: 205px; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + -ms-border-radius: 8px; + -o-border-radius: 8px; + border-radius: 8px; +} +/* line 25, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .platinum { + height: 130px; +} +/* line 27, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .platinum img { + height: 130px; +} +/* line 30, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .gold { + height: 60px; +} +/* line 32, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .gold img { + height: 60px; +} +/* line 36, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .silver h5 { + margin: 0; + font-size: 13px; +} +/* line 39, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .sponsors .silver p { + margin: 0; +} +/* line 43, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .box .sponsors li { + list-style-type: none; + margin-left: 0; + padding-bottom: 12px; +} +/* line 47, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .box .sponsors a { + color: #575c7c; + font-weight: bold; + text-decoration: none; +} +/* line 52, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/right/sponsors.sass */ +#right .hint { + margin: 0 0 0 2px; + font-size: 10px; + text-align: left; +} +/* line 1, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/stats.sass */ +#repo_count_container, +#build_count_container { + width: 100%; + height: 300px; + margin: 30px 0; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +#repositories li, +#summary .number a, +table.list .number a { + background-image: url('data:image/png;base64,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'); + background-repeat: no-repeat; +} + +/* line 9, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +#repositories li.green, +.green #summary .number a, +table.list .green .number a { + background-image: url('data:image/png;base64,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'); + color: green; + background-repeat: no-repeat; +} + +/* line 16, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +#repositories li.red, +.red #summary .number a, +table.list .red .number a { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAbpJREFUeNpskj1rVGEQhZ+Zu4jIrQSbNBJL+6QSBSUSSaWVlbqtZcBfIdhb+Q+0isSPxkrY/AIlGlKECEFQs7r3vh9zLPZmQ9CBKQbmOXMGjknipL4/uNk6bDpaN7TqtWKpm3gp29b/eXb+9afpya6dgN8e3b7h6AWpW7aU8H6GR8UVuDtu7Fnqxxfe7H5YgPsP1+426CXdDJv+wmrBSsIjaLyhGTWYAg/h6F777ssr+3z/+kV337e+a3X8E88dVisN4AYOuPt8RgimI7PLo1Lqpim1Ov6B9T1WCw6EgWNzIIIwA6CBNis2R6XWDfUd5Ao50wxAAC6dCkiYQQAFNka51qvqZpASJgiBmwZr/wogSMTyqOY8qzmfo5TTn7D/CiABIkPjuZ/tlVqoGEUMraEhB+RhziE6QQrteu7TVq0i3KkSdQGfFegDkkQXQRZb9n5l6ZKZfUVqDWgMbLBng3VsbrMAVUwb54rfmhwcVWlcBQVIw7WKyBIpRB/id4hZiKwYX/t4cLSI3NuVpbWA5wbLNhwBkEFIhNgz4/GdncPtM1kd4LbCkxDrFa1qLjAx2Hbj6cbO4SLkfwcAyIUwSDYhRvgAAAAASUVORK5CYII='); + color: #cc0000; + background-repeat: no-repeat; +} + +/* line 23, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +#summary .number a, +table.list .number a { + padding-left: 20px; +} + +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list tbody tr.allow-failure { + background-color: #bdbdbd; +} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list tbody td { + cursor: pointer; + background-color: #fffffa; +} +/* line 34, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list tbody tr:hover td { + background-color: #ffffe1; +} +/* line 38, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .green td { + background-color: #fafffa; +} +/* line 40, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .green:hover td { + background-color: #dcffdc; +} +/* line 42, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .green .number a { + color: green; +} +/* line 46, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .red td { + background-color: #fffafa; +} +/* line 48, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .red:hover td { + background-color: #ffdcdc; +} +/* line 50, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/status.sass */ +table.list .red .number a { + color: #cc0000; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs { + height: 29px; + border-bottom: 1px solid #cccccc; +} +/* line 7, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs li { + display: inline-block; + height: 28px; + margin-right: 10px; + background-color: #f6f6f6; + border: 1px solid #cccccc; + white-space: nowrap; + cursor: pointer; + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} +/* line 17, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs li:hover { + background-color: white; +} +/* line 20, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs .active { + background-color: white; + border-bottom-color: white; +} +/* line 24, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs h5 { + margin: 0; +} +/* line 27, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +.tabs h5 a { + display: block; + padding: 0 10px; + line-height: 30px; + font-size: 13px; + font-weight: normal; +} + +/* line 35, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#left .tabs { + margin-top: -29px; +} +/* line 38, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#left .tabs li:first-child { + margin-left: 20px; +} +/* line 41, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#left #tab_search:not(.active) { + display: none; +} + +/* line 45, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#main .tabs { + margin-top: 35px; +} +/* line 47, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#main .tabs a { + text-decoration: none; +} +/* line 50, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/tabs.sass */ +#main .tab { + margin-top: 20px; +} +/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#top { + color: #cccccc; + width: 100%; + line-height: 40px; + font-size: 13px; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #444444), color-stop(100%, #111111)); + background: -webkit-linear-gradient(#444444, #111111); + background: -moz-linear-gradient(#444444, #111111); + background: -o-linear-gradient(#444444, #111111); + background: linear-gradient(#444444, #111111); +} +/* line 10, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#top h1 { + float: left; + width: 73px; + height: 30px; + margin: 4px 40px 0 22px; + text-indent: -9999px; + background: url('data:image/png;base64,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') no-repeat; +} +/* line 18, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#top ul { + list-style-type: none; +} +/* line 21, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#top a { + color: #cccccc; + text-decoration: none; +} + +/* line 26, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation li { + display: inline-block; +} +/* line 29, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation li.active { + background-color: black; +} +/* line 31, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation li.active a { + color: white; +} +/* line 34, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation li a { + display: block; + padding: 0 15px; +} +/* line 37, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation li a:hover { + color: white; +} +/* line 40, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile { + position: relative; + float: right; + margin-right: 120px; +} +/* line 45, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile img { + position: absolute; + top: 7px; + left: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} +/* line 51, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile a { + padding: 0 35px 0 45px; +} +/* line 54, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile ul { + display: none; + position: absolute; + z-index: 300; + top: 40px; + width: 100%; + background-color: #444444; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3); + box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3); +} +/* line 64, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile ul li { + display: block; +} +/* line 67, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile ul li:last-child a:hover { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} +/* line 70, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile ul a { + display: block; + padding: 5px 35px 5px 45px; + line-height: 24px; + white-space: nowrap; +} +/* line 75, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/top.sass */ +#navigation .profile ul a:hover { + background-color: #555555; +} +#facebox { + position: absolute; + top: 0; + left: 0; + z-index: 100; + text-align: left; +} + + +#facebox .popup{ + position:relative; + border:3px solid rgba(0,0,0,0); + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; + -webkit-box-shadow:0 0 18px rgba(0,0,0,0.4); + -moz-box-shadow:0 0 18px rgba(0,0,0,0.4); + box-shadow:0 0 18px rgba(0,0,0,0.4); +} + +#facebox .content { + display:table; + width: 370px; + padding: 10px; + background: #fff; + -webkit-border-radius:4px; + -moz-border-radius:4px; + border-radius:4px; +} + +#facebox .content > p:first-child{ + margin-top:0; +} +#facebox .content > p:last-child{ + margin-bottom:0; +} + +#facebox .close{ + position:absolute; + top:5px; + right:5px; + padding:2px; + background:#fff; +} +#facebox .close img{ + opacity:0.3; +} +#facebox .close:hover img{ + opacity:1.0; +} + +#facebox .loading { + text-align: center; +} + +#facebox .image { + text-align: center; +} + +#facebox img { + border: 0; + margin: 0; +} + +#facebox_overlay { + position: fixed; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.facebox_hide { + z-index:-100; +} + +.facebox_overlayBG { + background-color: #000; + z-index: 99; +} + diff --git a/public/stylesheets/mocha.css b/public/stylesheets/mocha.css deleted file mode 100644 index 5913ae31..00000000 --- a/public/stylesheets/mocha.css +++ /dev/null @@ -1,176 +0,0 @@ -#mocha ul, #mocha li { - margin: 0; - padding: 0; -} - -#mocha ul { - list-style: none; -} - -#mocha h1, #mocha h2 { - margin: 0; -} - -#mocha h1 { - margin-top: 15px; - font-size: 1em; - font-weight: 200; -} - -#mocha h1 a { - text-decoration: none; - color: inherit; -} - -#mocha h1 a:hover { - text-decoration: underline; -} - -#mocha .suite .suite h1 { - margin-top: 0; - font-size: .8em; -} - -#mocha h2 { - font-size: 12px; - font-weight: normal; - cursor: pointer; -} - -#mocha .suite { - margin-left: 15px; -} - -#mocha .test { - margin-left: 15px; -} - -#mocha .test:hover h2::after { - position: relative; - top: 0; - right: -10px; - content: '(view source)'; - font-size: 12px; - font-family: arial; - color: #888; -} - -#mocha .test.pending:hover h2::after { - content: '(pending)'; - font-family: arial; -} - -#mocha .test.pass.medium .duration { - background: #C09853; -} - -#mocha .test.pass.slow .duration { - background: #B94A48; -} - -#mocha .test.pass::before { - content: '✓'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #00d6b2; -} - -#mocha .test.pass .duration { - font-size: 9px; - margin-left: 5px; - padding: 2px 5px; - color: white; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - box-shadow: inset 0 1px 1px rgba(0,0,0,.2); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; -} - -#mocha .test.pass.fast .duration { - display: none; -} - -#mocha .test.pending { - color: #0b97c4; -} - -#mocha .test.pending::before { - content: '◦'; - color: #0b97c4; -} - -#mocha .test.fail { - color: #c00; -} - -#mocha .test.fail pre { - color: black; -} - -#mocha .test.fail::before { - content: '✖'; - font-size: 12px; - display: block; - float: left; - margin-right: 5px; - color: #c00; -} - -#mocha .test pre.error { - color: #c00; -} - -#mocha .test pre { - display: inline-block; - font: 12px/1.5 monaco, monospace; - margin: 5px; - padding: 15px; - border: 1px solid #eee; - border-bottom-color: #ddd; - -webkit-border-radius: 3px; - -webkit-box-shadow: 0 1px 3px #eee; -} - -#error { - color: #c00; - font-size: 1.5 em; - font-weight: 100; - letter-spacing: 1px; -} - -#stats { - position: fixed; - top: 15px; - right: 10px; - font-size: 12px; - margin: 0; - color: #888; -} - -#stats .progress { - float: right; - padding-top: 0; -} - -#stats em { - color: black; -} - -#stats li { - display: inline-block; - margin: 0 5px; - list-style: none; - padding-top: 11px; -} - -code .comment { color: #ddd } -code .init { color: #2F6FAD } -code .string { color: #5890AD } -code .keyword { color: #8A6343 } -code .number { color: #2F6FAD }