diff --git a/app/assets/javascripts/app/models/user.js b/app/assets/javascripts/app/models/user.js
index 5eaa87dab..0a9046df1 100644
--- a/app/assets/javascripts/app/models/user.js
+++ b/app/assets/javascripts/app/models/user.js
@@ -11,5 +11,9 @@ app.models.User = Backbone.Model.extend({
expProfileUrl : function(){
return "/people/" + app.currentUser.get("guid") + "?ex=true"
+ },
+
+ isServiceConfigured : function(providerName) {
+ return _.include(this.get("configured_services"), providerName)
}
});
diff --git a/app/assets/javascripts/app/views/services_selector_view.js b/app/assets/javascripts/app/views/services_selector_view.js
index 7ed3e3c99..7dc17f107 100644
--- a/app/assets/javascripts/app/views/services_selector_view.js
+++ b/app/assets/javascripts/app/views/services_selector_view.js
@@ -1,5 +1,28 @@
app.views.ServicesSelector = app.views.Base.extend({
- templateName : "services-selector"
+ templateName : "services-selector",
+
+ events : {
+ "click label" : "askForAuth"
+ },
+
+ services : [
+ 'facebook',
+ 'twitter',
+ 'tumblr'
+ ],
+
+ presenter : function() {
+ return _.extend(this.defaultPresenter(), {services : this.services})
+ },
+
+ askForAuth : function(evt){
+ var $target = $(evt.target);
+
+ if(app.currentUser.isServiceConfigured($target.data('provider'))) { return }
+
+ var serviceUrl = $target.data('url')
+ window.open(serviceUrl, 'popup', 'height=400,width=500')
+ }
});
\ No newline at end of file
diff --git a/app/assets/stylesheets/new_styles/_base.scss b/app/assets/stylesheets/new_styles/_base.scss
index 719aaea8b..a1c681652 100644
--- a/app/assets/stylesheets/new_styles/_base.scss
+++ b/app/assets/stylesheets/new_styles/_base.scss
@@ -416,17 +416,29 @@ div[data-template=flow] {
label { display : inline;}
img {
+ @include transition(opacity);
+
cursor : pointer;
height : 28px;
width : 28px;
+ }
- &:hover {
- @include opacity(0.6);
+ input + label {
+ &:hover img {
+ @include box-shadow(0, 0, 10px, rgba(255,255,255,0.6))
}
}
input:not(:checked) + label {
- @include opacity(0.4);
+ img {
+ @include opacity(0.4);
+ }
+ }
+
+ input:checked + label {
+ &:hover img {
+ @include opacity(1);
+ }
}
input {
diff --git a/app/assets/templates/services-selector.jst.hbs b/app/assets/templates/services-selector.jst.hbs
index 992b062b0..b4d3a8e91 100644
--- a/app/assets/templates/services-selector.jst.hbs
+++ b/app/assets/templates/services-selector.jst.hbs
@@ -1,8 +1,8 @@
diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb
index 7f3fd6ca1..eb31f5857 100644
--- a/app/controllers/services_controller.rb
+++ b/app/controllers/services_controller.rb
@@ -49,11 +49,7 @@ class ServicesController < ApplicationController
end
end
- if current_user.getting_started
- redirect_to getting_started_path
- else
- redirect_to services_url
- end
+ render :text => ("")
end
def failure
diff --git a/app/presenters/user_presenter.rb b/app/presenters/user_presenter.rb
index 8b0b7f0c9..3612d562d 100644
--- a/app/presenters/user_presenter.rb
+++ b/app/presenters/user_presenter.rb
@@ -12,7 +12,8 @@ class UserPresenter
:admin => admin,
:aspects => aspects,
:services => services,
- :following_count => self.user.contacts.receiving.count
+ :following_count => self.user.contacts.receiving.count,
+ :configured_services => self.configured_services
}
).to_json(options)
end
@@ -21,6 +22,10 @@ class UserPresenter
ServicePresenter.as_collection(user.services)
end
+ def configured_services
+ user.services.map{|service| service.provider }
+ end
+
def aspects
AspectPresenter.as_collection(user.aspects)
end
diff --git a/app/views/shared/_add_remove_services.haml b/app/views/shared/_add_remove_services.haml
index 0abbf962b..0e541c40b 100644
--- a/app/views/shared/_add_remove_services.haml
+++ b/app/views/shared/_add_remove_services.haml
@@ -16,4 +16,4 @@
- AppConfig.configured_services.each do |service|
- unless @services.any?{|x| x.provider == service}
- %h4= link_to t("services.index.connect_to_#{service}"), "/auth/#{service}"
+ %h4= link_to t("services.index.connect_to_#{service}"), "#", :onclick => "window.open('/auth/#{service}', 'popup', 'height=400,width=500')"
diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb
index 372399525..084fbc4f8 100644
--- a/config/initializers/omniauth.rb
+++ b/config/initializers/omniauth.rb
@@ -20,7 +20,7 @@ Rails.application.config.middleware.use OmniAuth::Builder do
provider :tumblr, SERVICES['tumblr']['consumer_key'], SERVICES['tumblr']['consumer_secret']
end
if SERVICES['facebook'] && SERVICES['facebook']['app_id'] && SERVICES['facebook']['app_secret']
- provider :facebook, SERVICES['facebook']['app_id'], SERVICES['facebook']['app_secret'], { :scope => "publish_stream,email,offline_access",
+ provider :facebook, SERVICES['facebook']['app_id'], SERVICES['facebook']['app_secret'], { :display => "popup", :scope => "publish_stream,email,offline_access",
:client_options => {:ssl => {:ca_file => EnviromentConfiguration.ca_cert_file_location}}}
end
end
diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb
index 9017c3959..a60a575b1 100644
--- a/spec/controllers/services_controller_spec.rb
+++ b/spec/controllers/services_controller_spec.rb
@@ -47,18 +47,6 @@ describe ServicesController do
}.to change(@user.services, :count).by(1)
end
- it 'redirects to getting started if the user is getting started' do
- @user.getting_started = true
- post :create, :provider => 'twitter'
- response.should redirect_to getting_started_path
- end
-
- it 'redirects to services url if user is not getting started' do
- @user.getting_started = false
- post :create, :provider => 'twitter'
- response.should redirect_to services_url
- end
-
it 'creates a twitter service' do
Service.delete_all
@user.getting_started = false
diff --git a/spec/javascripts/app/models/user_spec.js b/spec/javascripts/app/models/user_spec.js
index 9565df5cc..6870a07df 100644
--- a/spec/javascripts/app/models/user_spec.js
+++ b/spec/javascripts/app/models/user_spec.js
@@ -12,7 +12,14 @@ describe("app.models.User", function(){
this.user.set({id : 1})
expect(this.user.authenticated()).toBeTruthy();
});
+ });
+ describe("isServiceConnected", function(){
+ it("checks to see if the sent provider name is a configured service", function(){
+ this.user.set({configured_services : ["facebook"]})
+ expect(this.user.isServiceConfigured("facebook")).toBeTruthy()
+ expect(this.user.isServiceConfigured("tumblr")).toBeFalsy()
+ });
});
});
diff --git a/spec/javascripts/app/views/services_selector_view_spec.js b/spec/javascripts/app/views/services_selector_view_spec.js
index ec4580e2b..af3a6e10a 100644
--- a/spec/javascripts/app/views/services_selector_view_spec.js
+++ b/spec/javascripts/app/views/services_selector_view_spec.js
@@ -23,12 +23,33 @@ describe("app.views.ServicesSelector", function(){
// this tests the crazy css we have in a bassackwards way
// check out toggling the services on the new publisher and make sure it works if you change stuff.
it("selects the checkbox when the image is clicked", function(){
- expect($("label[for=service_toggle_facebook]").css("opacity")).toBeLessThan(0.8) //floating point weirdness, be safe.
+ expect($("label[for=service_toggle_facebook] img").css("opacity")).toBeLessThan(0.8) //floating point weirdness, be safe.
this.view.$("input[value='facebook']").select()
waitsFor(function(){
- return $("label[for=service_toggle_facebook]").css("opacity") == 1
+ return $("label[for=service_toggle_facebook] img").css("opacity") == 1
})
})
});
+
+ describe("askForAuth", function() {
+ beforeEach( function(){
+ this.evt = jQuery.Event("click");
+ this.evt.target = "