From 5026eccc6a60561e0758fdbbd7059acbf5b74de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonne=20Ha=C3=9F?= Date: Thu, 1 Aug 2013 12:52:16 +0200 Subject: [PATCH] Refactor and reorder backbone app initialization, fixes hovercards Also added cucumber feature for hovercards --- app/assets/javascripts/app/app.js | 51 ++++++++++++-------- features/hovercards.feature | 20 ++++++++ features/step_definitions/hovercard_steps.rb | 15 ++++++ 3 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 features/hovercards.feature create mode 100644 features/step_definitions/hovercard_steps.rb diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index 258d8b149..8e31cec2b 100644 --- a/app/assets/javascripts/app/app.js +++ b/app/assets/javascripts/app/app.js @@ -20,7 +20,7 @@ var app = { views: {}, pages: {}, forms: {}, - + user: function(userAttrs) { if(userAttrs) { return this._user = new app.models.User(userAttrs) } return this._user || false @@ -34,24 +34,12 @@ var app = { initialize: function() { app.router = new app.Router(); - if (window.gon == undefined) { - window.gon = {preloads:{}}; - } - - app.currentUser = app.user(window.gon.user) || new app.models.User(); - + this.setupDummyPreloads(); this.setupFacebox(); - this.setupHovercards(); - - if(app.currentUser.authenticated()) { - app.header = new app.views.Header(); - $("header").prepend(app.header.el); - app.header.render(); - } - - Backbone.history.start({pushState: true}); - - app.aspectMemberships = new app.views.AspectMembership(); + this.setupUser(); + this.setupHeader(); + this.setupBackboneLinks(); + this.setupGlobalViews(); }, hasPreload : function(prop) { @@ -63,7 +51,7 @@ var app = { window.gon.preloads[prop] = val }, - parsePreload : function(prop){ + parsePreload : function(prop) { if(!app.hasPreload(prop)) { return } var preload = window.gon.preloads[prop] @@ -72,13 +60,33 @@ var app = { return(preload) }, + setupDummyPreloads: function() { + if (window.gon == undefined) { + window.gon = {preloads:{}}; + } + }, + + setupUser: function() { + app.currentUser = app.user(window.gon.user) || new app.models.User(); + }, + + setupHeader: function() { + if(app.currentUser.authenticated()) { + app.header = new app.views.Header(); + $("header").prepend(app.header.el); + app.header.render(); + } + }, + setupFacebox: function() { $.facebox.settings.closeImage = app.baseImageUrl()+'facebox/closelabel.png'; $.facebox.settings.loadingImage = app.baseImageUrl()+'facebox/loading.gif'; $.facebox.settings.opacity = 0.75; }, - setupHovercards: function() { + setupBackboneLinks: function() { + Backbone.history.start({pushState: true}); + // there's probably a better way to do this... $("a[rel=backbone]").live("click", function(evt){ evt.preventDefault(); @@ -87,8 +95,11 @@ var app = { $(".stream_title").text(link.text()) app.router.navigate(link.attr("href").substring(1) ,true) }); + }, + setupGlobalViews: function() { app.hovercard = new app.views.Hovercard(); + app.aspectMemberships = new app.views.AspectMembership(); }, /* mixpanel wrapper function */ diff --git a/features/hovercards.feature b/features/hovercards.feature new file mode 100644 index 000000000..54a63b4ab --- /dev/null +++ b/features/hovercards.feature @@ -0,0 +1,20 @@ +@javascript +Feature: Hovercards + In order to not having to leave the page to view a persons profile + As a user + I want to use hovercards + + Background: + Given a user named "Bob Jones" with email "bob@bob.bob" + And "bob@bob.bob" has a public post with text "public stuff" + And a user named "Alice" with email "alice@alice.alice" + And I sign in as "alice@alice.alice" + + + Scenario: Hovercards on the main stream + Given I am on "bob@bob.bob"'s page + Then I should see "public stuff" within ".stream_element" + When I activate the first hovercard + Then I should see a hovercard + When I deactivate the first hovercard + Then I should not see a hovercard diff --git a/features/step_definitions/hovercard_steps.rb b/features/step_definitions/hovercard_steps.rb new file mode 100644 index 000000000..949f41722 --- /dev/null +++ b/features/step_definitions/hovercard_steps.rb @@ -0,0 +1,15 @@ +When(/^I activate the first hovercard$/) do + page.execute_script("$('.hovercardable').first().trigger('mouseenter');") +end + +Then(/^I should see a hovercard$/) do + page.should have_css '#hovercard' +end + +When(/^I deactivate the first hovercard$/) do + page.execute_script("$('.hovercardable').first().trigger('mouseleave');") +end + +Then(/^I should not see a hovercard$/) do + page.should_not have_css '#hovercard' +end