diff --git a/Gemfile b/Gemfile index 8487b75..885bd2e 100644 --- a/Gemfile +++ b/Gemfile @@ -11,11 +11,6 @@ gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git' gem 'rack-contrib' gem 'validates_formatting_of' -platforms :jruby do - gem 'jruby-openssl' - gem 'therubyrhino' -end - platforms :ruby_18 do gem 'fastercsv' end diff --git a/Gemfile.lock b/Gemfile.lock index 7a74c74..c1e5298 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,10 +48,8 @@ GEM arel (3.0.0) bbenezech-nested_form (0.0.2) bcrypt-ruby (3.0.1) - bcrypt-ruby (3.0.1-java) bootstrap-sass (1.4.3) sass-rails (~> 3.1) - bouncy-castle-java (1.5.0146.1) builder (3.0.0) coffee-rails (3.2.1) coffee-script (>= 2.2.0) @@ -68,7 +66,6 @@ GEM warden (~> 1.1) erubis (2.7.0) eventmachine (0.12.10) - eventmachine (0.12.10-java) execjs (1.2.13) multi_json (~> 1.0) fastercsv (1.5.4) @@ -76,16 +73,12 @@ GEM haml (3.2.0.alpha.10) hike (1.2.1) hpricot (0.8.5) - hpricot (0.8.5-java) i18n (0.6.0) journey (1.0.0) jquery-rails (2.0.0) railties (>= 3.2.0.beta, < 5.0) thor (~> 0.14) - jruby-openssl (0.7.4) - bouncy-castle-java json (1.6.5) - json (1.6.5-java) kaminari (0.13.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -144,7 +137,6 @@ GEM rack (~> 1.0) tilt (~> 1.1, != 1.3.0) sqlite3 (1.3.5) - therubyrhino (1.73.0) thin (1.3.1) daemons (>= 1.0.9) eventmachine (>= 0.12.6) @@ -167,7 +159,6 @@ GEM crack (>= 0.1.7) PLATFORMS - java ruby DEPENDENCIES @@ -176,14 +167,12 @@ DEPENDENCIES fastercsv geokit haml (~> 3.2.0.alpha) - jruby-openssl pg rack-contrib rails (~> 3.2.0.rc2) rails_admin! simplecov sqlite3 - therubyrhino thin uglifier validates_formatting_of diff --git a/app/assets/javascripts/main.js.erb b/app/assets/javascripts/main.js.erb index 4847038..e7edefb 100644 --- a/app/assets/javascripts/main.js.erb +++ b/app/assets/javascripts/main.js.erb @@ -1,30 +1,37 @@ $(function() { var center = new google.maps.LatLng(42.358431, -71.059773); - var zoomLevel = 15; var mapOptions = { center: center, + disableDoubleClickZoom: true, + keyboardShortcuts: false, mapTypeControl: false, mapTypeId: google.maps.MapTypeId.ROADMAP, panControl: false, + rotateControl: false, + scaleControl: false, scrollwheel: false, - zoom: zoomLevel, + streetViewControl: true, + zoom: 15, zoomControl: false - }; + }; var map = new google.maps.Map(document.getElementById("map"), mapOptions); + var size = new google.maps.Size(27.0, 37.0); + var origin = new google.maps.Point(0, 0); + var anchor = new google.maps.Point(13.0, 18.0); var greenMarkerImage = new google.maps.MarkerImage('<%= image_path 'markers/green.png' %>', - new google.maps.Size(27.0, 37.0), - new google.maps.Point(0, 0), - new google.maps.Point(13.0, 18.0) + size, + origin, + anchor ); var redMarkerImage = new google.maps.MarkerImage('<%= image_path 'markers/red.png' %>', - new google.maps.Size(27.0, 37.0), - new google.maps.Point(0, 0), - new google.maps.Point(13.0, 18.0) + size, + origin, + anchor ); var markerShadowImage = new google.maps.MarkerImage('<%= image_path 'markers/shadow.png' %>', new google.maps.Size(46.0, 37.0), - new google.maps.Point(0, 0), - new google.maps.Point(13.0, 18.0) + origin, + anchor ); var activeThingId; var activeMarker; @@ -49,7 +56,7 @@ $(function() { activeInfoWindow.close(); } var infoWindow = new google.maps.InfoWindow({ - maxWidth: 232 + maxWidth: 210 }); google.maps.event.addListener(infoWindow, 'closeclick', function() { isWindowOpen = false; @@ -93,8 +100,7 @@ $(function() { success: function(data) { $(submitButton).attr("disabled", false); if(data.errors) { - $('#address_label').addClass('error', 500); - $('#address').addClass('error', 500); + $('#address').parent().addClass('error'); $('#address').focus(); } else { $('#address_label').removeClass('error', 500); @@ -117,7 +123,7 @@ $(function() { addMarker(thing.id, point, color); }, i * 100); }); - map.setZoom(18); + map.setZoom(19); } } }); @@ -131,8 +137,7 @@ $(function() { $(submitButton).attr("disabled", true); if($('#address').val() === '') { $(submitButton).attr("disabled", false); - $('#address_label').addClass('error', 500); - $('#address').addClass('error', 500); + $('#address').parent().addClass('error'); $('#address').focus(); } else { $.ajax({ @@ -146,15 +151,13 @@ $(function() { }, error: function(jqXHR) { $(submitButton).attr("disabled", false); - $('#address_label').addClass('error', 500); - $('#address').addClass('error', 500); + $('#address').parent().addClass('error'); $('#address').focus(); }, success: function(data) { $(submitButton).attr("disabled", false); if(data.errors) { - $('#address_label').addClass('error', 500); - $('#address').addClass('error', 500); + $('#address').parent().addClass('error'); $('#address').focus(); } else { $('#address_label').removeClass('error', 500); @@ -214,28 +217,22 @@ $(function() { var errors = [] if(!/[\w\.%\+\]+@[\w\]+\.+[\w]{2,}/.test($('#user_email').val())) { errors.push($('#user_email')); - $('#user_email_label').addClass('error', 500); - $('#user_email').addClass('error', 500); + $('#user_email').parent().addClass('error'); } else { - $('#user_email_label').removeClass('error'); - $('#user_email').removeClass('error'); + $('#user_email').parent().removeClass('error'); } if(!$(this).data('state') || $(this).data('state') === 'user_sign_up') { if($('#user_name').val() === '') { errors.push($('#user_name')); - $('#user_name_label').addClass('error', 500); - $('#user_name').addClass('error', 500); + $('#user_name').parent().addClass('error'); } else { - $('#user_name_label').removeClass('error'); - $('#user_name').removeClass('error'); + $('#user_name').parent().removeClass('error'); } if($('#user_password_confirmation').val().length < 6 || $('#user_password_confirmation').val().length > 20) { errors.push($('#user_password_confirmation')); - $('#user_password_confirmation_label').addClass('error', 500); - $('#user_password_confirmation').addClass('error', 500); + $('#user_password_confirmation').parent().addClass('error'); } else { - $('#user_password_confirmation_label').removeClass('error'); - $('#user_password_confirmation').removeClass('error'); + $('#user_password_confirmation').parent().removeClass('error'); } if(errors.length > 0) { $(submitButton).attr("disabled", false); @@ -262,33 +259,27 @@ $(function() { $(submitButton).attr("disabled", false); if(data.errors.email) { errors.push($('#user_email')); - $('#user_email_label').addClass('error', 500); - $('#user_email').addClass('error', 500); + $('#user_email').parent().addClass('error'); } if(data.errors.name) { errors.push($('#user_name')); - $('#user_name_label').addClass('error', 500); - $('#user_name').addClass('error', 500); + $('#user_name').parent().addClass('error'); } if(data.errors.organization) { errors.push($('#user_organization')); - $('#user_organization_label').addClass('error', 500); - $('#user_organization').addClass('error', 500); + $('#user_organization').parent().addClass('error'); } if(data.errors.voice_number) { errors.push($('#user_voice_number')); - $('#user_voice_number_label').addClass('error', 500); - $('#user_voice_number').addClass('error', 500); + $('#user_voice_number').parent().addClass('error'); } if(data.errors.sms_number) { errors.push($('#user_sms_number')); - $('#user_sms_number_label').addClass('error', 500); - $('#user_sms_number').addClass('error', 500); + $('#user_sms_number').parent().addClass('error'); } if(data.errors.password) { errors.push($('#user_password_confirmation')); - $('#user_password_confirmation_label').addClass('error', 500); - $('#user_password_confirmation').addClass('error', 500); + $('#user_password_confirmation').parent().addClass('error'); } errors[0].focus(); }, @@ -311,11 +302,9 @@ $(function() { } else if($(this).data('state') === 'user_sign_in') { if($('#user_password').val().length < 6 || $('#user_password').val().length > 20) { errors.push($('#user_password')); - $('#user_password_label').addClass('error', 500); - $('#user_password').addClass('error', 500); + $('#user_password').parent().addClass('error'); } else { - $('#user_password_label').removeClass('error'); - $('#user_password').removeClass('error'); + $('#user_password').parent().removeClass('error'); } if(errors.length > 0) { $(submitButton).attr("disabled", false); @@ -335,8 +324,7 @@ $(function() { }, error: function(jqXHR) { $(submitButton).attr("disabled", false); - $('#user_password_label').addClass('error', 500); - $('#user_password').addClass('error', 500); + $('#user_password').parent().addClass('error'); $('#user_password').focus(); }, success: function(data) { @@ -372,8 +360,7 @@ $(function() { }, error: function(jqXHR) { $(submitButton).attr("disabled", false); - $('#user_email_label').addClass('error', 500); - $('#user_email').addClass('error', 500); + $('#user_email').parent().addClass('error'); $('#user_email').focus(); }, success: function() { @@ -402,13 +389,7 @@ $(function() { 'name': $('#thing_name').val() } }, - beforeSend: function() { - $('#info_window').hide(); - $('#loader').show(); - }, error: function(jqXHR) { - $('#loader').hide(); - $('#info_window').show(); $(submitButton).attr("disabled", false); }, success: function(data) { @@ -422,7 +403,9 @@ $(function() { } }, success: function(data) { + activeInfoWindow.close(); activeInfoWindow.setContent(data); + activeInfoWindow.open(map, activeMarker); activeMarker.setIcon(greenMarkerImage); activeMarker.setAnimation(google.maps.Animation.BOUNCE); } @@ -449,13 +432,7 @@ $(function() { 'name': $('#thing_name').val() } }, - beforeSend: function() { - $('#info_window').hide(); - $('#loader').show(); - }, error: function(jqXHR) { - $('#loader').hide(); - $('#info_window').show(); $(submitButton).attr("disabled", false); }, success: function(data) { @@ -469,7 +446,9 @@ $(function() { } }, success: function(data) { + activeInfoWindow.close(); activeInfoWindow.setContent(data); + activeInfoWindow.open(map, activeMarker); activeMarker.setIcon(redMarkerImage); activeMarker.setAnimation(null); } @@ -479,18 +458,14 @@ $(function() { } return false; }); - $('#edit_profile_form').live('submit', function() { - var submitButton = $("#edit_profile_form input[type='submit']"); - $(submitButton).attr("disabled", true); + $('#edit_profile_link').live('click', function() { + var link = $(this); + $(link).addClass('disabled'); $.ajax({ type: 'GET', url: '/users/edit', - data: { - 'utf8': '✓', - 'authenticity_token': $('#edit_profile_form input[name="authenticity_token"]').val() - }, error: function(jqXHR) { - $(submitButton).attr("disabled", false); + $(link).removeClass('disabled'); }, success: function(data) { $('#content').html(data); @@ -504,43 +479,33 @@ $(function() { var errors = [] if(!/[\w\.%\+\]+@[\w\]+\.+[\w]{2,}/.test($('#user_email').val())) { errors.push($('#user_email')); - $('#user_email_label').addClass('error', 500); - $('#user_email').addClass('error', 500); + $('#user_email').parent().addClass('error'); } else { - $('#user_email_label').removeClass('error'); - $('#user_email').removeClass('error'); + $('#user_email').parent().removeClass('error'); } if($('#user_name').val() === '') { errors.push($('#user_name')); - $('#user_name_label').addClass('error', 500); - $('#user_name').addClass('error', 500); + $('#user_name').parent().addClass('error'); } else { - $('#user_name_label').removeClass('error'); - $('#user_name').removeClass('error'); + $('#user_name').parent().removeClass('error'); } if($('#user_zip').val() != '' && !/^\d{5}(-\d{4})?$/.test($('#user_zip').val())) { errors.push($('#user_zip')); - $('#user_zip_label').addClass('error', 500); - $('#user_zip').addClass('error', 500); + $('#user_zip').parent().addClass('error'); } else { - $('#user_zip_label').removeClass('error'); - $('#user_zip').removeClass('error'); + $('#user_zip').parent().removeClass('error'); } if($('#user_password').val() && ($('#user_password').val().length < 6 || $('#user_password').val().length > 20)) { errors.push($('#user_password')); - $('#user_password_label').addClass('error', 500); - $('#user_password').addClass('error', 500); + $('#user_password').parent().addClass('error'); } else { - $('#user_password_label').removeClass('error'); - $('#user_password').removeClass('error'); + $('#user_password').parent().removeClass('error'); } if($('#user_current_password').val().length < 6 || $('#user_current_password').val().length > 20) { errors.push($('#user_current_password')); - $('#user_current_password_label').addClass('error', 500); - $('#user_current_password').addClass('error', 500); + $('#user_current_password').parent().addClass('error'); } else { - $('#user_current_password_label').removeClass('error'); - $('#user_current_password').removeClass('error'); + $('#user_current_password').parent().removeClass('error'); } if(errors.length > 0) { $(submitButton).attr("disabled", false); @@ -576,63 +541,51 @@ $(function() { $(submitButton).attr("disabled", false); if(data.errors.email) { errors.push($('#user_email')); - $('#user_email_label').addClass('error', 500); - $('#user_email').addClass('error', 500); + $('#user_email').parent().addClass('error'); } if(data.errors.name) { errors.push($('#user_name')); - $('#user_name_label').addClass('error', 500); - $('#user_name').addClass('error', 500); + $('#user_name').parent().addClass('error'); } if(data.errors.organization) { errors.push($('#user_organization')); - $('#user_organization_label').addClass('error', 500); - $('#user_organization').addClass('error', 500); + $('#user_organization').parent().addClass('error'); } if(data.errors.voice_number) { errors.push($('#user_voice_number')); - $('#user_voice_number_label').addClass('error', 500); - $('#user_voice_number').addClass('error', 500); + $('#user_voice_number').parent().addClass('error'); } if(data.errors.sms_number) { errors.push($('#user_sms_number')); - $('#user_sms_number_label').addClass('error', 500); - $('#user_sms_number').addClass('error', 500); + $('#user_sms_number').parent().addClass('error'); } if(data.errors.address_1) { errors.push($('#user_address_1')); - $('#user_address_1_label').addClass('error', 500); - $('#user_address_1').addClass('error', 500); + $('#user_address_1').parent().addClass('error'); } if(data.errors.address_2) { errors.push($('#user_address_2')); - $('#user_address_2_label').addClass('error', 500); - $('#user_address_2').addClass('error', 500); + $('#user_address_2').parent().addClass('error'); } if(data.errors.city) { errors.push($('#user_city')); - $('#user_city_label').addClass('error', 500); - $('#user_city').addClass('error', 500); + $('#user_city').parent().addClass('error'); } if(data.errors.state) { errors.push($('#user_state')); - $('#user_state_label').addClass('error', 500); - $('#user_state').addClass('error', 500); + $('#user_state').parent().addClass('error'); } if(data.errors.zip) { errors.push($('#user_zip')); - $('#user_zip_label').addClass('error', 500); - $('#user_zip').addClass('error', 500); + $('#user_zip').parent().addClass('error'); } if(data.errors.password) { errors.push($('#user_password')); - $('#user_password_label').addClass('error', 500); - $('#user_password').addClass('error', 500); + $('#user_password').parent().addClass('error'); } if(data.errors.current_password) { errors.push($('#user_current_password')); - $('#user_current_password_label').addClass('error', 500); - $('#user_current_password').addClass('error', 500); + $('#user_current_password').parent().addClass('error'); } errors[0].focus(); }, @@ -643,18 +596,14 @@ $(function() { } return false; }); - $('#sign_out_form').live('submit', function() { - var submitButton = $("#sign_out_form input[type='submit']"); - $(submitButton).attr("disabled", true); + $('#sign_out_link').live('click', function() { + var link = $(this); + $(link).addClass('disabled'); $.ajax({ type: 'GET', url: '/users/sign_out.json', - data: { - 'utf8': '✓', - 'authenticity_token': $('#sign_out_form input[name="authenticity_token"]').val() - }, error: function(jqXHR) { - $(submitButton).attr("disabled", false); + $(link).removeClass('disabled'); }, success: function(data) { $.ajax({ @@ -679,33 +628,25 @@ $(function() { $.ajax({ type: 'GET', url: '/users/sign_in', - data: { - 'utf8': '✓', - 'authenticity_token': $('#sign_in_form input[name="authenticity_token"]').val(), - }, - beforeSend: function() { - $('#info_window').hide(); - $('#loader').show(); - }, error: function(jqXHR) { - $('#loader').hide(); - $('#info_window').show(); $(submitButton).attr("disabled", false); }, success: function(data) { + activeInfoWindow.close(); activeInfoWindow.setContent(data); + activeInfoWindow.open(map, activeMarker); } }); return false; }); - $('#back_form').live('submit', function() { - var submitButton = $("#back_form input[type='submit']"); - $(submitButton).attr("disabled", true); + $('#back_link').live('click', function() { + var link = $(this); + $(link).addClass('disabled'); $.ajax({ type: 'GET', url: '/sidebar/search', error: function(jqXHR) { - $(submitButton).attr("disabled", false); + $(link).removeClass('disabled'); }, success: function(data) { $('#content').html(data); @@ -728,13 +669,7 @@ $(function() { 'thing_id': activeThingId } }, - beforeSend: function() { - $('#info_window').hide(); - $('#loader').show(); - }, error: function(jqXHR) { - $('#loader').hide(); - $('#info_window').show(); $(submitButton).attr("disabled", false); }, success: function(data) { @@ -748,7 +683,9 @@ $(function() { } }, success: function(data) { + activeInfoWindow.close(); activeInfoWindow.setContent(data); + activeInfoWindow.open(map, activeMarker); } }); } diff --git a/app/assets/stylesheets/screen.css b/app/assets/stylesheets/screen.css index c984f21..fdae594 100644 --- a/app/assets/stylesheets/screen.css +++ b/app/assets/stylesheets/screen.css @@ -19,12 +19,15 @@ h2 { } form.form-stacked { - padding-left: 10px; + padding-left: 0; margin-bottom: 0; } -label, input { - white-space: nowrap; +form.form-stacked fieldset.control-group { + padding: 0; +} + +label { text-align: left; } @@ -32,7 +35,7 @@ input { width: 200px; } -input, select, option, button, input[type="submit"] { +.sidebar input, .sidebar select, .sidebar option, .sidebar button, .sidebar form.search-form input, .sidebar form.search-form select, .sidebar form.search-form option, .sidebar a.btn { display: block; margin-bottom: 10px; } @@ -40,34 +43,110 @@ input, select, option, button, input[type="submit"] { input[type="radio"], input[type="checkbox"] { display: inline; width: auto; - margin: 0 10px 10px 0; + margin-right: 10px; } input#user_new { margin-bottom: 0; } -button.btn, input[type="submit"].btn { - display: block; - text-align: center; +input#user_existing { + margin-bottom: 10px; +} + +form select, button.btn, input[type="submit"].btn { width: 210px; } -form label.error { +/* Copied from Bootstrap 2.0-wip + * Modifications: + * width: 180px + */ +form input.search-query { + -moz-border-radius: 14px; + -webkit-border-radius: 14px; + border-radius: 14px; + margin-bottom: 0; + padding-left: 14px; + padding-right: 14px; + width: 180px; +} + +p { + padding: 0 10px; +} + +a.btn { + width: 180px; +} + +/* Copied from Bootstrap 2.0-wip */ +.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { color: #b94a48; } -form input.error, form textarea.error { +.control-group.error input, .control-group.error textarea { + color: #b94a48; border-color: #ee5f5b; } -form input.error:focus, form textarea.error:focus { +.control-group.error input:focus, .control-group.error textarea:focus { border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } +.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} + +.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning input, .control-group.warning textarea { + color: #c09853; + border-color: #ccae64; +} + +.control-group.warning input:focus, .control-group.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} + +.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} + +.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { + color: #468847; +} + +.control-group.success input, .control-group.success textarea { + color: #468847; + border-color: #57a957; +} + +.control-group.success input:focus, .control-group.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} + +.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} + .table { display: table; height: 100%; @@ -84,32 +163,49 @@ form input.error:focus, form textarea.error:focus { vertical-align: top; } -.alert-message { +.alert-message.block-message { + padding: 8px 12px 8px; + margin-bottom: 10px; +} + +.sidebar .alert-message.block-message { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; text-align: left; - margin-bottom: 10px; - padding: 8px 20px; + padding-left: 10px; +} + +fieldset { + margin-bottom: 0; } .sidebar { - width: 252px; + width: 250px; border-right: 1px solid #ccc; text-align: center; } -.sidebar form.form-stacked { - padding-left: 20px; +.sidebar fieldset.control-group { + margin-left: 20px; } -.sidebar p { - width: 210px; +/* Copied from Bootstrap 2.0-wip + * Modifications: + * padding-bottom: 10px + * margin-top: 10px + * margin-bottom: 10px + */ +.sidebar fieldset.form-actions { + padding: 17px 20px 10px; + margin-top: 10px; + margin-bottom: 10px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; } .sidebar p#tagline { color: #ffffff; - padding: 10px 20px; background-color: #c43c35; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); @@ -119,11 +215,12 @@ form input.error:focus, form textarea.error:focus { background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(top, #ee5f5b, #c43c35); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + padding: 10px 20px; text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .sidebar #logos img { diff --git a/app/controllers/things_controller.rb b/app/controllers/things_controller.rb index 8528db7..0a4188a 100644 --- a/app/controllers/things_controller.rb +++ b/app/controllers/things_controller.rb @@ -2,7 +2,7 @@ class ThingsController < ApplicationController respond_to :json def show - @things = Thing.find_closest(params[:lat], params[:lng], params[:limit] || 40) + @things = Thing.find_closest(params[:lat], params[:lng], params[:limit] || 10) unless @things.blank? respond_with @things else diff --git a/app/models/thing.rb b/app/models/thing.rb index d6f4fd2..5db51e4 100644 --- a/app/models/thing.rb +++ b/app/models/thing.rb @@ -4,7 +4,7 @@ class Thing < ActiveRecord::Base belongs_to :user has_many :reminders - def self.find_closest(lat, lng, limit=40) + def self.find_closest(lat, lng, limit=10) query = <<-SQL SELECT *, (3959 * ACOS(COS(RADIANS(?)) * COS(RADIANS(lat)) * COS(radians(lng) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(lat)))) AS distance FROM things diff --git a/app/views/layouts/_flash.html.haml b/app/views/layouts/_flash.html.haml index 15966a1..18ca899 100644 --- a/app/views/layouts/_flash.html.haml +++ b/app/views/layouts/_flash.html.haml @@ -1,18 +1,18 @@ - if flash[:notice] - .alert-message.success{:"data-alert" => true} - %a{:class => "close", :href => "#"} + .alert-message.block-message.info.fade.in{:"data-alert" => true} + %a{:class => "close", :"data-dismiss" => "alert", :href => "#"} × %p = flash[:notice] - if flash[:warning] - .alert-message.warning{:"data-alert" => true} - %a{:class => "close", :href => "#"} + .alert-message.block-message.warning.fade.in{:"data-alert" => true} + %a{:class => "close", :"data-dismiss" => "alert", :href => "#"} × %p = flash[:warning] - if flash[:error] - .alert-message.error{:"data-alert" => true} - %a{:class => "close", :href => "#"} + .alert-message.block-message.error.fade.in{:"data-alert" => true} + %a{:class => "close", :"data-dismiss" => "alert", :href => "#"} × %p = flash[:error] diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 6143efd..d282f43 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -3,18 +3,21 @@ %head %title = t("titles.main", :thing => t("defaults.thing").titleize) - = stylesheet_link_tag "http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css" - = stylesheet_link_tag "screen" - = javascript_include_tag "http://maps.google.com/maps/api/js?sensor=false" + = csrf_meta_tag + %meta{:name => "viewport", :content => "width=800, user-scalable=no"} + / HTML5 shim, for IE6-8 support of HTML5 elements + /[if lt IE 9] + = javascript_include_tag "http://html5shim.googlecode.com/svn/trunk/html5.js" + = javascript_include_tag "http://maps.google.com/maps/api/js?sensor=false&language=#{I18n.locale}" = javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" = javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js" = javascript_include_tag "http://twitter.github.com/bootstrap/1.4.0/bootstrap-twipsy.min.js" = javascript_include_tag "http://twitter.github.com/bootstrap/1.4.0/bootstrap-alerts.min.js" = javascript_include_tag "http://twitter.github.com/bootstrap/1.4.0/bootstrap-modal.min.js" = javascript_include_tag "main" - = csrf_meta_tag - %meta{:name => "viewport", :content => "width=800, user-scalable=no"} %script{:type => "text/javascript"} var _gaq=_gaq||[];_gaq.push(["_setAccount","UA-20825280-2"]),_gaq.push(["_setDomainName",".adoptahydrant.org"]),_gaq.push(["_trackPageview"]),function(){var a=document.createElement("script");a.type="text/javascript",a.async=!0,a.src=("https:"==document.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)}(); + = stylesheet_link_tag "http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css" + = stylesheet_link_tag "screen" %body = yield diff --git a/app/views/layouts/info_window.html.haml b/app/views/layouts/info_window.html.haml index 7e8aecd..ab64457 100644 --- a/app/views/layouts/info_window.html.haml +++ b/app/views/layouts/info_window.html.haml @@ -1,5 +1,3 @@ -#loader{:style => "display: none;"} - = image_tag "ajax-loader.gif" #info_window = render :partial => "layouts/flash", :locals => {:flash => flash} = yield diff --git a/app/views/main/index.html.haml b/app/views/main/index.html.haml index 6762df2..074bf62 100644 --- a/app/views/main/index.html.haml +++ b/app/views/main/index.html.haml @@ -3,7 +3,7 @@ .table-cell.sidebar %h1 = image_tag "logos/adopt-a-hydrant.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize) - %p.alert-message#tagline + %p.alert-message.block-message#tagline = t("defaults.tagline") #content = render :partial => "layouts/flash", :locals => {:flash => flash} @@ -17,8 +17,9 @@ %a{:href => "http://bostonbuilt.org/"} = image_tag "logos/boston.png", :alt => t("sponsors.city"), :title => t("sponsors.city") #feedback - %a{:href => URI.escape("mailto:adoptahydrant@cityofboston.gov?subject=#{t("titles.main", :thing => t("defaults.thing").titleize)} #{t("links.feedback").titleize}")} - = t("links.feedback") + %p + %a{:href => URI.escape("mailto:adoptahydrant@cityofboston.gov?subject=#{t("titles.main", :thing => t("defaults.thing").titleize)} #{t("links.feedback").titleize}")} + = t("links.feedback") .table-cell.map-container #map   diff --git a/app/views/main/unauthenticated.html.haml b/app/views/main/unauthenticated.html.haml index 9eadb47..65fce7d 100644 --- a/app/views/main/unauthenticated.html.haml +++ b/app/views/main/unauthenticated.html.haml @@ -3,7 +3,7 @@ .table-cell.sidebar %h1 = image_tag "logos/adopt-a-hydrant.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize) - %p.alert-message#tagline + %p.alert-message.block-message#tagline = t("defaults.tagline") #content = render :partial => "sidebar/combo_form" diff --git a/app/views/passwords/edit.html.haml b/app/views/passwords/edit.html.haml index 080e91b..f7abe84 100644 --- a/app/views/passwords/edit.html.haml +++ b/app/views/passwords/edit.html.haml @@ -1,7 +1,9 @@ +%h2 + = t("titles.edit_profile") = form_for resource, :as => resource_name, :url => password_path(resource_name), :html => {:id => "edit_form", :class => "form-stacked", :method => :put} do |f| - %h2 - = t("titles.edit_profile") = f.hidden_field "reset_password_token" - = f.label "password", t("labels.password_new"), :id => "user_password_label" - = f.password_field "password" - = f.submit t("buttons.change_password"), :class => "btn" + %fieldset.control-group + = f.label "password", t("labels.password_new"), :id => "user_password_label" + = f.password_field "password" + %fieldset.form-actions + = f.submit t("buttons.change_password"), :class => "btn" diff --git a/app/views/sidebar/_combo_form.html.haml b/app/views/sidebar/_combo_form.html.haml index 158da88..55f00f3 100644 --- a/app/views/sidebar/_combo_form.html.haml +++ b/app/views/sidebar/_combo_form.html.haml @@ -1,53 +1,65 @@ = form_for :user, :html => {:id => "combo-form", :class => "form-stacked"} do |f| #common_fields - %label{:for => "user_email", :id => "user_email_label"} - = t("labels.email") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.email_field "email", :value => params[:user] ? params[:user][:email] : nil - = f.label "new" , radio_button_tag("user", "new", true).html_safe + t("labels.user_new") - = f.label "existing", radio_button_tag("user", "existing").html_safe + t("labels.user_existing") + %fieldset.control-group + %label{:for => "user_email", :id => "user_email_label"} + = t("labels.email") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.email_field "email", :value => params[:user] ? params[:user][:email] : nil + %fieldset.control-group.radio + = f.label "new" , radio_button_tag("user", "new", true).html_safe + t("labels.user_new") + = f.label "existing", radio_button_tag("user", "existing").html_safe + t("labels.user_existing") #user_sign_up_fields - %label{:for => "user_name", :id => "user_name_label"} - = t("labels.name") - %small - = t("captions.public") - = f.text_field "name" - %label{:for => "user_organization", :id => "user_organization_label"} - = t("labels.organization") - %small - = t("captions.public") - = f.text_field "organization" - %label{:for => "user_voice_number", :id => "user_voice_number_label"} - = t("labels.voice_number") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number") - %label{:for => "user_sms_number", :id => "user_sms_number_label"} - = t("labels.sms_number") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number") - %label{:for => "user_password_confirmation", :id => "user_password_confirmation_label"} - = t("labels.password_choose") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.password_field "password_confirmation" - = f.submit t("buttons.sign_up"), :class => "btn primary" + %fieldset.control-group + %label{:for => "user_name", :id => "user_name_label"} + = t("labels.name") + %small + = t("captions.public") + = f.text_field "name" + %fieldset.control-group + %label{:for => "user_organization", :id => "user_organization_label"} + = t("labels.organization") + %small + = t("captions.public") + = f.text_field "organization" + %fieldset.control-group + %label{:for => "user_voice_number", :id => "user_voice_number_label"} + = t("labels.voice_number") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number") + %fieldset.control-group + %label{:for => "user_sms_number", :id => "user_sms_number_label"} + = t("labels.sms_number") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number") + %fieldset.control-group + %label{:for => "user_password_confirmation", :id => "user_password_confirmation_label"} + = t("labels.password_choose") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.password_field "password_confirmation" + %fieldset.form-actions + = f.submit t("buttons.sign_up"), :class => "btn primary" %p = t("defaults.tos", :tos => link_to(t("titles.tos"), "#", :id => "tos_link", :"data-controls-modal" => "tos")).html_safe #user_sign_in_fields{:style => "display: none;"} - %label{:for => "user_password", :id => "user_password_label"} - = t("labels.password") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.password_field "password" - = f.label "remember_me" , f.check_box("remember_me", :checked => true).html_safe + t("labels.remember_me") - = f.submit t("buttons.sign_in"), :class => "btn primary" + %fieldset.control-group + %label{:for => "user_password", :id => "user_password_label"} + = t("labels.password") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.password_field "password" + %fieldset.control-group + = f.label "remember_me" , f.check_box("remember_me", :checked => true).html_safe + t("labels.remember_me") + %fieldset.form-actions + = f.submit t("buttons.sign_in"), :class => "btn primary" %p = link_to t("links.forgot_password"), "#", :id => "user_forgot_password_link" #user_forgot_password_fields{:style => "display: none;"} - = f.submit t("buttons.email_password"), :class => "btn primary" + %fieldset.form-actions + = f.submit t("buttons.email_password"), :class => "btn primary" %p = link_to t("links.remembered_password"), "#", :id => "user_remembered_password_link" = render :partial => "sidebar/tos" diff --git a/app/views/sidebar/_search.html.haml b/app/views/sidebar/_search.html.haml index 7d90dda..1b1f66f 100644 --- a/app/views/sidebar/_search.html.haml +++ b/app/views/sidebar/_search.html.haml @@ -1,14 +1,17 @@ -= form_tag "/address", :method => "get", :id => "address_form", :class => "form-stacked" do - = label_tag "city_state", t("labels.city_state"), :id => "city_state_label" - = select_tag "city_state", "".html_safe - = label_tag "address", t("labels.address"), :id => "address_label" - = search_field_tag "address", params[:address], :placeholder => [t("defaults.address_1"), t("defaults.neighborhood")].join(", ") - = hidden_field_tag "limit", params[:limit] || 40 - = submit_tag t("buttons.find", :thing => t("defaults.thing").pluralize), :class => "btn primary" -= form_for :user, :url => edit_user_registration_path, :html => {:id => "edit_profile_form", :class => "form-stacked", :method => "get"} do |f| - = f.submit t("buttons.edit_profile"), :class => "btn" -= form_for :sign_out, :html => {:id => "sign_out_form", :class => "form-stacked"} do |f| - = f.submit t("buttons.sign_out"), :class => "btn danger" += form_tag "/address", :method => "get", :id => "address_form", :class => "search-form form-stacked" do + = hidden_field_tag "limit", params[:limit] || 10 + %fieldset.control-group + = label_tag "city_state", t("labels.city_state"), :id => "city_state_label" + = select_tag "city_state", "".html_safe + %fieldset.control-group + = label_tag "address", t("labels.address"), :id => "address_label" + = search_field_tag "address", params[:address], :placeholder => [t("defaults.address_1"), t("defaults.neighborhood")].join(", "), :class => "search-query" + %fieldset.form-actions + = submit_tag t("buttons.find", :thing => t("defaults.thing").pluralize), :class => "btn primary" + %a{:href => edit_user_registration_path, :id => "edit_profile_link", :class => "btn"} + = t("buttons.edit_profile") + %a{:href => destroy_user_session_path, :id => "sign_out_link", :class => "btn danger"} + = t("buttons.sign_out") :javascript $(function() { $('#address').focus(); diff --git a/app/views/sidebar/_tos.html.haml b/app/views/sidebar/_tos.html.haml index f92ddf1..94831ca 100644 --- a/app/views/sidebar/_tos.html.haml +++ b/app/views/sidebar/_tos.html.haml @@ -1,6 +1,6 @@ .modal.hide.fade#tos .modal-header - %a{:class => "close", :href => "#"} + %a{:class => "close", :"data-dismiss" => "modal", :href => "#"} × %h2 = t("titles.tos") diff --git a/app/views/sidebar/edit_profile.html.haml b/app/views/sidebar/edit_profile.html.haml index 4b0cb54..548c934 100644 --- a/app/views/sidebar/edit_profile.html.haml +++ b/app/views/sidebar/edit_profile.html.haml @@ -1,69 +1,81 @@ = form_for resource, :as => resource_name, :url => registration_path(resource_name), :html => {:id => "edit_form", :class => "form-stacked", :method => :put} do |f| = f.hidden_field "id" - %label{:for => "user_email", :id => "user_email_label"} - = t("labels.email") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.email_field "email" - %label{:for => "user_name", :id => "user_name_label"} - = t("labels.name") - %small - = t("captions.public") - = f.text_field "name" - %label{:for => "user_organization", :id => "user_organization_label"} - = t("labels.organization") - %small - = t("captions.public") - = f.text_field "organization" - %label{:for => "user_voice_number", :id => "user_voice_number_label"} - = t("labels.voice_number") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number"), :value => number_to_phone(f.object.voice_number) - %label{:for => "user_sms_number", :id => "user_sms_number_label"} - = t("labels.sms_number") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number"), :value => number_to_phone(f.object.sms_number) - %label{:for => "user_address_1", :id => "user_address_1_label"} - = t("labels.address_1") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.text_field "address_1", :placeholder => t("defaults.address_1") - %label{:for => "user_address_2", :id => "user_address_2_label"} - = t("labels.address_2") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.text_field "address_2", :placeholder => t("defaults.address_2") - %label{:for => "user_city", :id => "user_city_label"} - = t("labels.city") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.text_field "city", :placeholder => t("defaults.city") - %label{:for => "user_state", :id => "user_state_label"} - = t("labels.state") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.select "state", us_states, :include_blank => true - %label{:for => "user_zip", :id => "user_zip_label"} - = t("labels.zip") - %small - = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") - = f.text_field "zip", :placeholder => t("defaults.zip") - %label{:for => "user_password", :id => "user_password_label"} - = t("labels.password_new") - %small - = t("captions.optional") - = f.password_field "password" - %label{:for => "user_current_password", :id => "user_current_password_label"} - = t("labels.current_password") - %small - = t("captions.required") - = f.password_field "current_password" - = f.submit t("buttons.update"), :class => "btn primary" -= form_for :things, :url => root_path, :html => {:id => "back_form", :class => "form-stacked", :method => "get"} do |f| - = f.hidden_field "id" - = f.submit t("buttons.back"), :class => "btn" + %fieldset.control-group + %label{:for => "user_email", :id => "user_email_label"} + = t("labels.email") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.email_field "email" + %fieldset.control-group + %label{:for => "user_name", :id => "user_name_label"} + = t("labels.name") + %small + = t("captions.public") + = f.text_field "name" + %fieldset.control-group + %label{:for => "user_organization", :id => "user_organization_label"} + = t("labels.organization") + %small + = t("captions.public") + = f.text_field "organization" + %fieldset.control-group + %label{:for => "user_voice_number", :id => "user_voice_number_label"} + = t("labels.voice_number") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number"), :value => number_to_phone(f.object.voice_number) + %fieldset.control-group + %label{:for => "user_sms_number", :id => "user_sms_number_label"} + = t("labels.sms_number") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number"), :value => number_to_phone(f.object.sms_number) + %fieldset.control-group + %label{:for => "user_address_1", :id => "user_address_1_label"} + = t("labels.address_1") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.text_field "address_1", :placeholder => t("defaults.address_1") + %fieldset.control-group + %label{:for => "user_address_2", :id => "user_address_2_label"} + = t("labels.address_2") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.text_field "address_2", :placeholder => t("defaults.address_2") + %fieldset.control-group + %label{:for => "user_city", :id => "user_city_label"} + = t("labels.city") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.text_field "city", :placeholder => t("defaults.city") + %fieldset.control-group + %label{:for => "user_state", :id => "user_state_label"} + = t("labels.state") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.select "state", us_states, :include_blank => true + %fieldset.control-group + %label{:for => "user_zip", :id => "user_zip_label"} + = t("labels.zip") + %small + = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private") + = f.text_field "zip", :placeholder => t("defaults.zip") + %fieldset.control-group + %label{:for => "user_password", :id => "user_password_label"} + = t("labels.password_new") + %small + = t("captions.optional") + = f.password_field "password" + %fieldset.control-group + %label{:for => "user_current_password", :id => "user_current_password_label"} + = t("labels.current_password") + %small + = t("captions.required") + = f.password_field "current_password" + %fieldset.form-actions + = f.submit t("buttons.update"), :class => "btn primary" + %a{:href => root_path, :id => "back_link", :class => "btn"} + = t("buttons.back") :javascript $(function() { $('#user_email').focus(); diff --git a/app/views/things/_abandon.html.haml b/app/views/things/_abandon.html.haml index 685f93a..257fbb9 100644 --- a/app/views/things/_abandon.html.haml +++ b/app/views/things/_abandon.html.haml @@ -2,4 +2,5 @@ = f.hidden_field "id" = f.hidden_field "user_id", :value => "" = f.hidden_field "name", :value => "" - = f.submit t("buttons.abandon", :thing => t("defaults.thing")), :class => "btn danger" + %fieldset.form-actions + = f.submit t("buttons.abandon", :thing => t("defaults.thing")), :class => "btn danger" diff --git a/app/views/things/adopt.html.haml b/app/views/things/adopt.html.haml index 21c0378..498bcb4 100644 --- a/app/views/things/adopt.html.haml +++ b/app/views/things/adopt.html.haml @@ -1,8 +1,10 @@ +%h2 + = t("titles.adopt", :thing => t("defaults.thing").titleize) = form_for :thing, :url => things_path, :method => :put, :html => {:id => "adoption_form", :class => "form-stacked"} do |f| - %h2 - = t("titles.adopt", :thing => t("defaults.thing").titleize) = f.hidden_field "id" = f.hidden_field "user_id", :value => current_user.id - = f.label "name", t("labels.name_thing", :thing => t("defaults.thing")), :id => "thing_name_label" - = f.text_field "name" - = f.submit t("buttons.adopt"), :class => "btn primary" + %fieldset.control-group + = f.label "name", t("labels.name_thing", :thing => t("defaults.thing")), :id => "thing_name_label" + = f.text_field "name" + %fieldset.form-actions + = f.submit t("buttons.adopt"), :class => "btn primary" diff --git a/app/views/users/_reminder.html.haml b/app/views/users/_reminder.html.haml index 48e21cc..c0a4754 100644 --- a/app/views/users/_reminder.html.haml +++ b/app/views/users/_reminder.html.haml @@ -2,4 +2,5 @@ = f.hidden_field "from_user_id", :value => current_user.id = f.hidden_field "to_user_id", :value => @thing.user.id = f.hidden_field "thing_id", :value => @thing.id - = f.submit t("buttons.send_reminder"), :class => "btn" + %fieldset.form-actions + = f.submit t("buttons.send_reminder"), :class => "btn" diff --git a/config/database.yml b/config/database.yml index c2da227..f1b4364 100644 --- a/config/database.yml +++ b/config/database.yml @@ -11,3 +11,6 @@ development: &DEVELOPMENT test: <<: *DEVELOPMENT database: adopt_a_thing_test + +production: + <<: *DEVELOPMENT diff --git a/config/locales/de.yml b/config/locales/de.yml index f45ee03..8e5491e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -6,6 +6,7 @@ de: adopt: "Adopt!" back: "Zurück" change_password: "Mein Passwort ändern" + close: "Schließen" edit_profile: "Profil bearbeiten" email_password: "Bitte schicken Sie mir mein Passwort" find: "Finden Sie %{thing}" diff --git a/config/locales/en.yml b/config/locales/en.yml index 61c685e..5e7ddd8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -6,6 +6,7 @@ en: adopt: "Adopt!" back: "Back" change_password: "Change my password" + close: "Close" edit_profile: "Edit profile" email_password: "Email me my password" find: "Find %{thing}" diff --git a/config/locales/es.yml b/config/locales/es.yml index 8148434..61f10d7 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -6,6 +6,7 @@ es: adopt: "Adoptar!" back: "De nuevo" change_password: "Cambiar mi contraseña" + close: "Cerca" edit_profile: "Editar perfil" email_password: "Correo electrónico mi contraseña" find: "Encontrar %{thing}" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f1bf381..1f78807 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -6,6 +6,7 @@ fr: adopt: "Adopter!" back: "Retour" change_password: "Changer mon mot de passe" + close: "Fermer" edit_profile: "Modifier le profil" email_password: "Envoyez-moi mon mot de passe" find: "Trouver %{thing}" diff --git a/config/locales/pt.yml b/config/locales/pt.yml index c93c7b4..e02ebca 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -6,6 +6,7 @@ pt: adopt: "Adote!" back: "De volta" change_password: "Alterar a minha senha" + close: "Fechar" edit_profile: "Editar perfil" email_password: "E-mail minha senha" find: "Encontrar %{thing}" diff --git a/screenshot.png b/screenshot.png index f783028..a2c2d06 100644 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/test/functional/main_controller_test.rb b/test/functional/main_controller_test.rb index 56a1242..e80b292 100644 --- a/test/functional/main_controller_test.rb +++ b/test/functional/main_controller_test.rb @@ -20,8 +20,8 @@ class MainControllerTest < ActionController::TestCase get :index assert_response :success assert_select 'form' do - assert_select '[action=?]', '/' - assert_select '[method=?]', 'post' + assert_select '[action=?]', '/address' + assert_select '[method=?]', 'get' end assert_select 'label#city_state_label', 'City' assert_select 'select#city_state' do diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index c856698..cca2e0e 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -15,20 +15,13 @@ class UsersControllerTest < ActionController::TestCase assert_select '[action=?]', '/users' assert_select '[method=?]', 'post' end - assert_select 'input', :count => 18 + assert_select 'input', :count => 15 assert_select 'label', :count => 12 assert_select 'input[name="commit"]' do assert_select '[type=?]', 'submit' assert_select '[value=?]', 'Update' end - assert_select 'form#back_form' do - assert_select '[action=?]', '/' - assert_select '[method=?]', 'get' - end - assert_select 'input[name="commit"]' do - assert_select '[type=?]', 'submit' - assert_select '[value=?]', 'Back' - end + assert_select 'a.btn', 'Back' end test 'should update user if password is correct' do