diff --git a/app/views/aspects/manage.html.haml b/app/views/aspects/manage.html.haml index 3a7c690bf..a94ad57d6 100644 --- a/app/views/aspects/manage.html.haml +++ b/app/views/aspects/manage.html.haml @@ -51,7 +51,7 @@ %span.tip click to edit %ul.tools - %li= link_to t('.add_a_new_contact'), "#manage_aspect_contacts_pane_#{hash[:aspect].id}", :class => 'manage_aspect_contacts_button' + %li= link_to t('.add_a_new_contact'), "#manage_aspect_contacts_pane_#{hash[:aspect].id}", :class => 'manage_aspect_contacts_button', :rel => "facebox" %li!= remove_link(hash[:aspect]) %ul.dropzone{:data=>{:aspect_id=>hash[:aspect].id}} @@ -65,7 +65,7 @@ .draggable_info =t('.drag_to_add') - .fancybox_content + .facebox_content %div{:id => "manage_aspect_contacts_pane_#{hash[:aspect].id}"} = render "requests/manage_aspect_contacts", :aspect => hash[:aspect], :manage => true, :contact_hashes => hash[:contacts] diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index bd5803ced..b8903cdb5 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -51,7 +51,7 @@ %li = link_to '+', '#add_aspect_pane', :class => "add_aspect_button", :title => t('aspects.manage.add_a_new_aspect'), :rel => 'facebox' - .fancybox_content + .facebox_content #add_aspect_pane = render "aspects/new_aspect" diff --git a/app/views/photos/show.html.haml b/app/views/photos/show.html.haml index fc576dfa4..0493a9610 100644 --- a/app/views/photos/show.html.haml +++ b/app/views/photos/show.html.haml @@ -7,10 +7,11 @@ .span-15.append-1.last #photo_controls - .right - =link_to "← #{t('previous')}", @prev_photo, :rel => 'prefetch', :id => 'photo_show_left' - \/ - =link_to "#{t('next')} →", @next_photo, :rel => 'prefetch', :id => 'photo_show_right' + -if @additional_photos.length > 1 + .right + =link_to "← #{t('previous')}", @prev_photo, :rel => 'prefetch', :id => 'photo_show_left' + \/ + =link_to "#{t('next')} →", @next_photo, :rel => 'prefetch', :id => 'photo_show_right' - if @photo.status_message_id =link_to "← #{t('.view_original_post')}", @photo.status_message diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index ecc9667e3..4e2e461d1 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -46,9 +46,9 @@ - for service in current_user.services = image_tag "social_media_logos/#{service.provider}-16x16.png", :title => service.provider - = link_to '(?)', "#question_mark_pane", :class => 'question_mark', :style=>"display:none;" + = link_to '(?)', "#question_mark_pane", :class => 'question_mark', :style=>"display:none;", :rel => 'facebox' - .fancybox_content + .facebox_content #question_mark_pane = render 'shared/public_explain' diff --git a/public/javascripts/stream.js b/public/javascripts/stream.js index cd981a781..75f218ec6 100644 --- a/public/javascripts/stream.js +++ b/public/javascripts/stream.js @@ -86,7 +86,7 @@ var Stream = { var $this = $(this), container = document.createElement("div"), $container = $(container).attr("class", "video-container"), - $videoContainer = $this.parent().siblings("div.video-container"); + $videoContainer = $this.siblings("div.video-container"); if ($videoContainer.length > 0) { $videoContainer.slideUp('fast', function() { @@ -116,7 +116,7 @@ var Stream = { } $container.hide() - .insertAfter($this.parent()) + .insertAfter($this) .slideDown('fast'); $this.click(function() { diff --git a/public/javascripts/validation.js b/public/javascripts/validation.js index e932e49db..5f80f4aaa 100644 --- a/public/javascripts/validation.js +++ b/public/javascripts/validation.js @@ -12,19 +12,27 @@ var Validation = { characters: /^(([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,}))(, *(([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})))*$/ } }, + whiteListed: function(keyCode) { + var keyCodes = [0, 37, 38, 39, 40, 8, 9]; + return $.grep(keyCodes, function(element) { return keyCode !== element; }).length === keyCodes.length - 1; + }, + events: { usernameKeypress: function(evt) { - if(evt.keyCode === 0) { + if(Validation.whiteListed(evt.keyCode)) { return; } + if(!Validation.rules.username.characters.test(this.value + String.fromCharCode(evt.keyCode))) { evt.preventDefault(); } - }, + }, + emailKeypress: function(evt) { - if(evt.keyCode === 0) { + if(Validation.whiteListed(evt.keyCode)) { return; } + if(!Validation.rules.email.characters.test(this.value + String.fromCharCode(evt.keyCode))) { $('#user_email').css('border-color', '#8B0000'); } else { diff --git a/public/javascripts/view.js b/public/javascripts/view.js index 444eb31f2..c0f62c9a6 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -65,20 +65,6 @@ var View = { selector: ".add_aspect_button" }, - fancyBoxButtons: { - selectors: [ - ".add_aspect_button", - ".manage_aspect_contacts_button", - ".invite_user_button", - ".add_photo_button", - ".remove_person_button", - ".question_mark", - ".share_with_button", - ".aspect_detail_button", - ".aspect_selector_edit" - ] - }, - debug: { click: function() { $("#debug_more").toggle("fast"); diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 7d35ffa49..17115c215 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -1207,10 +1207,6 @@ ul#settings_nav .settings_pane :display none -#fancybox-close:hover - :background - :color transparent - .contact_pictures, #aspect_listings li img @@ -1302,7 +1298,7 @@ input[type="search"] :-webkit-appearance textfield :-moz-appearance textfield -.fancybox_content +.facebox_content :display none #photo_edit_options diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb index 73cd0680a..cdfc79907 100644 --- a/spec/controllers/aspects_controller_spec.rb +++ b/spec/controllers/aspects_controller_spec.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. require 'spec_helper' +require File.join(Rails.root, "spec", "shared_behaviors", "log_override") describe AspectsController do render_views @@ -25,6 +26,21 @@ describe AspectsController do request.env["HTTP_REFERER"] = 'http://' + request.host end + describe "custom logging on success" do + before do + @action = :index + end + it_should_behave_like "it overrides the logs on success" + end + + describe "custom logging on redirect" do + before do + @action = :show + @action_params = {'id' => @aspect0.id.to_s} + end + it_should_behave_like "it overrides the logs on redirect" + end + describe "#index" do it "assigns @contacts to all the user's contacts" do Factory.create :person diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 802d6f7c1..40528366b 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. require 'spec_helper' +require File.join(Rails.root, "spec", "shared_behaviors", "log_override") describe HomeController do render_views @@ -26,102 +27,20 @@ describe HomeController do end end - #This describe should apply to any controller class. HomeController is just the simplest. - describe 'log overriding in lib/log_overrider' do + describe "custom logging on success" do before do - Rails.stub(:logger).and_return(FakeLogger.new) - end - context 'cross-stage' do - before do - pending "This might require patching Rails" - get :show - @lines = Rails.logger.infos - @id = @lines[1].match(/r_id=(\w+)\s/).captures.first - end - it 'logs a unified id in a request' do - id = @lines.first.match(/r_id=(\w+)\s/).captures.first - @lines.each do |line| - line.match(/r_id=(\w+)\s/).captures.first.should == @id - end - end - it 'logs different ids in different requests' do - get :show - old_lines = Rails.logger.infos.select do |line| - line.match(/r_id=(\w+)\s/).captures.first == @id - end - old_lines.length.should == Rails.logger.infos.length/2 - end - end - context 'starting' do - before do - pending "This code is never reached in tests, but it seems to work in actual requests" - get :show - @line = Rails.logger.infos.first - end - it 'logs it' do - @line.should match /event=request_started/ - end - end - context 'rendering' do - before do - get :show, :lasers => 'green' - @lines = Rails.logger.infos.select{|l| l.include?("event=render")} - end - it 'logs all renders' do - @lines.length.should == 1 - end - it 'logs layouts' do - pending 'where is the template=home/show line?' - home_line = @lines.detect{|t| - t.include?("template=home/show.html.haml")} - home_line.should match /layout=layouts\/application/ - end - - end - context 'completion' do - context 'ok' do - before do - get :show, :lasers => 'green' - @line = Rails.logger.infos.last - end - it 'logs the completion of a request' do - @line.include?('event=request_completed').should be_true - end - it 'logs an ok' do - @line.include?('status=200').should be_true - end - it 'logs the controller' do - @line.include?('controller=HomeController').should be_true - end - it 'logs the action' do - @line.include?('action=show').should be_true - end - it 'logs params' do - @line.include?("params='{\"lasers\"=>\"green\"}'").should be_true - end - it 'does not log the view rendering time addition' do - @line.include?("(Views: ").should be_false - end - end - context 'redirected' do - before do - sign_in @user - get :show, :lasers => 'green' - @line = Rails.logger.infos.last - end - it 'logs a redirect' do - @line.include?('status=302').should be_true - end - end + @action = :show + @action_params = {"lasers" => "green"} end + it_should_behave_like "it overrides the logs on success" end - class FakeLogger - attr_accessor :infos - def initialize - self.infos = [] - end - def info line - self.infos << line + + describe "custom logging on redirect" do + before do + sign_in :user, make_user + @action = :show + @action_params = {"lasers" => "green"} end + it_should_behave_like "it overrides the logs on redirect" end end diff --git a/spec/javascripts/validation-spec.js b/spec/javascripts/validation-spec.js index f289f926d..41eed51a6 100644 --- a/spec/javascripts/validation-spec.js +++ b/spec/javascripts/validation-spec.js @@ -15,6 +15,15 @@ describe("Validation", function() { }); }); }); + describe("whiteListed", function() { + it("returns true if the keyCode is whitelisted", function() { + expect(Validation.whiteListed(0)).toBeTruthy(); + }); + + it("returns false if it's not", function() { + expect(Validation.whiteListed(9001)).toBeFalsy(); + }); + }); describe("events", function() { describe("usernameKeypress", function() { it("doesn't allow the user to type anything but letters, numbers and underscores", function() { diff --git a/spec/javascripts/view-spec.js b/spec/javascripts/view-spec.js index 2b8dade69..09b394cb2 100644 --- a/spec/javascripts/view-spec.js +++ b/spec/javascripts/view-spec.js @@ -11,14 +11,6 @@ describe("View", function() { }); }); - describe("fancyBoxButtons", function() { - describe("selectors", function() { - it("is an array of all the selectors that will have fancybox attached", function() { - expect(typeof View.fancyBoxButtons.selectors === "object").toBeTruthy(); - expect($.isArray(View.fancyBoxButtons.selectors)).toBeTruthy(); - }); - }); - }); describe("debug", function() { describe("click", function() { diff --git a/spec/shared_behaviors/log_override.rb b/spec/shared_behaviors/log_override.rb new file mode 100644 index 000000000..8a604ec08 --- /dev/null +++ b/spec/shared_behaviors/log_override.rb @@ -0,0 +1,63 @@ +class FakeLogger + attr_accessor :infos + + def initialize + self.infos = [] + end + + def info line + self.infos << line + end +end + +shared_examples_for 'it overrides the logs on success' do + before do + Rails.stub(:logger).and_return(FakeLogger.new) + end + context 'rendering' do + it 'logs renders' do + get @action, @action_params + @lines = Rails.logger.infos.select { |l| l.include?("event=render") } + @lines.length.should > 0 + end + end + context 'completion' do + context 'ok' do + before do + get @action, @action_params + @line = Rails.logger.infos.last + end + it 'logs the completion of a request' do + @line.include?('event=request_completed').should be_true + end + it 'logs an ok' do + @line.include?('status=200').should be_true + end + it 'logs the controller' do + @line.include?("controller=#{controller.class.name}").should be_true + end + it 'logs the action' do + @line.include?("action=#{@action}").should be_true + end + it 'logs params' do + if @action_params + @line.include?("params='#{@action_params.inspect.gsub(" ", "")}'").should be_true + end + end + it 'does not log the view rendering time addition' do + @line.include?("(Views: ").should be_false + end + end + end +end + +shared_examples_for 'it overrides the logs on redirect' do + before do + Rails.stub(:logger).and_return(FakeLogger.new) + get @action, @action_params + @line = Rails.logger.infos.last + end + it 'logs a redirect' do + @line.include?('status=302').should be_true + end +end