From 0ec364e44c0db8b80a10ae989735f021dd0582dd Mon Sep 17 00:00:00 2001 From: danielgrippi <danielgrippi@gmail.com> Date: Tue, 8 May 2012 16:34:07 -0700 Subject: [PATCH] DG MS; popup on services, inlined in the composer --- app/assets/javascripts/app/models/user.js | 4 +++ .../app/views/services_selector_view.js | 25 ++++++++++++++++++- app/assets/stylesheets/new_styles/_base.scss | 18 ++++++++++--- .../templates/services-selector.jst.hbs | 6 ++--- app/controllers/services_controller.rb | 6 +---- app/presenters/user_presenter.rb | 7 +++++- app/views/shared/_add_remove_services.haml | 2 +- config/initializers/omniauth.rb | 2 +- spec/controllers/services_controller_spec.rb | 12 --------- spec/javascripts/app/models/user_spec.js | 7 ++++++ .../app/views/services_selector_view_spec.js | 25 +++++++++++++++++-- spec/presenters/user_presenter_spec.rb | 8 ++++++ 12 files changed, 93 insertions(+), 29 deletions(-) diff --git a/app/assets/javascripts/app/models/user.js b/app/assets/javascripts/app/models/user.js index 5eaa87dabf..0a9046df15 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 7ed3e3c99c..7dc17f1077 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 719aaea8b7..a1c6816521 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 992b062b03..b4d3a8e911 100644 --- a/app/assets/templates/services-selector.jst.hbs +++ b/app/assets/templates/services-selector.jst.hbs @@ -1,8 +1,8 @@ <!--*CSS MAGIC* CHECKBOX IS HIDDEN AND IS CHECKED BY CLICKING THE LABEL, CHANGE THIS AT YOUR OWN PERIL, RUN JASMINE AFTER--> <div class="magic-service-selector"> - {{#each current_user.services}} - <input id="service_toggle_{{provider}}" type="checkbox" name="services" class="service" value="{{provider}}" /> - <label for="service_toggle_{{provider}}"><img class="legacy-provider-image" src="/assets/social_media_logos/{{provider}}-32x32.png" data-provider="{{provider}}" /></label> + {{#each services}} + <input id="service_toggle_{{this}}" type="checkbox" name="services" class="service" value="{{this}}" /> + <label for="service_toggle_{{this}}"><img class="legacy-provider-image" src="/assets/social_media_logos/{{this}}-32x32.png" data-provider="{{this}}" data-url="/auth/{{this}}" /></label> {{/each}} </div> diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb index 7f3fd6ca1e..eb31f5857e 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 => ("<script>window.close()</script>") end def failure diff --git a/app/presenters/user_presenter.rb b/app/presenters/user_presenter.rb index 8b0b7f0c92..3612d562db 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 0abbf962b6..0e541c40b1 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 3723995251..084fbc4f82 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 9017c39594..a60a575b18 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 9565df5cc1..6870a07dfd 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 ec4580e2bb..af3a6e10a3 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 = "<label data-url='testing' data-provider='facebook'>" + + spyOn(window, "open") + }); + + it("opens a window if app.currentUser does not have the service configured", function() { + app.currentUser.set({configured_services : []}) + this.view.askForAuth(this.evt) + expect(window.open).toHaveBeenCalled() + }); + + it("doesn't open a window if app.currentUser has the service already configured", function() { + app.currentUser.set({configured_services : ['facebook']}) + this.view.askForAuth(this.evt) + expect(window.open).not.toHaveBeenCalled() + }); + }) }); \ No newline at end of file diff --git a/spec/presenters/user_presenter_spec.rb b/spec/presenters/user_presenter_spec.rb index 9406741c95..2f322b4979 100644 --- a/spec/presenters/user_presenter_spec.rb +++ b/spec/presenters/user_presenter_spec.rb @@ -26,4 +26,12 @@ describe UserPresenter do @presenter.services.should include(:provider => 'fakebook') end end + + describe '#configured_services' do + it 'displays a list of the users configured services' do + fakebook = stub(:provider => 'fakebook') + bob.stub(:services).and_return([fakebook]) + @presenter.configured_services.should include("fakebook") + end + end end \ No newline at end of file -- GitLab