Nicolae Claudius
11 years ago
27 changed files with 402 additions and 82 deletions
@ -0,0 +1,6 @@
|
||||
class Users::AuthenticationsController < UsersController |
||||
active_scaffold :authentication do |conf| |
||||
conf.list.columns = [:provider] |
||||
conf.actions.exclude :create, :search, :update, :show |
||||
end |
||||
end |
@ -0,0 +1,78 @@
|
||||
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController |
||||
|
||||
def google_apps |
||||
oauthorize 'google_apps' |
||||
end |
||||
|
||||
protected |
||||
|
||||
def oauthorize(provider) |
||||
@user = find_for_oauth(provider) |
||||
return unless @user |
||||
if @user.active_for_authentication? |
||||
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", kind: provider.camelcase |
||||
session["devise.google_apps_data"] = env["omniauth.auth"] |
||||
@user.remember_me! if session.delete(:user_remember_me) == "1" |
||||
end |
||||
if user_signed_in? |
||||
redirect_to :back |
||||
else |
||||
sign_in_and_redirect @user, event: :authentication |
||||
end |
||||
end |
||||
|
||||
def find_for_oauth(provider) |
||||
user = if resource then resource |
||||
elsif email then find_or_create_by_email(email) |
||||
elsif uid then find_or_create_by_uid(uid) |
||||
else raise "Bad provider data: #{auth.inspect}" |
||||
end |
||||
|
||||
authentication = user.authentications.where(provider: provider).first |
||||
if authentication.nil? |
||||
authentication_attrs = authorization_attrs.merge(provider: provider) |
||||
authentication = user.authentications.build(authentication_attrs) |
||||
user.authentications << authentication |
||||
end |
||||
|
||||
return user |
||||
end |
||||
|
||||
def find_or_create_by_uid(uid) |
||||
auth = Authentication.where(uid: uid).first |
||||
return auth ? auth.user : make_user |
||||
end |
||||
|
||||
def find_or_create_by_email(email) |
||||
user = User.where(email: email).first |
||||
return user ? user : make_user |
||||
end |
||||
|
||||
def make_user |
||||
return current_user if user_signed_in? |
||||
user = User.new(user_attrs.merge(password: Devise.friendly_token[0,20])) |
||||
user.skip_confirmation! |
||||
user.save!(validate: false) |
||||
return user |
||||
end |
||||
|
||||
def auth; env["omniauth.auth"] end |
||||
def uid; @uid ||= auth['uid'] rescue nil end |
||||
def email; @email ||= auth['info']['email'] rescue nil end |
||||
|
||||
def authorization_attrs |
||||
@authorization_attrs ||= { |
||||
uid: uid, |
||||
token: auth['credentials']['token'], |
||||
secret: auth['credentials']['secret'], |
||||
name: auth['info']['name'] |
||||
} |
||||
end |
||||
|
||||
def user_attrs |
||||
@user_attrs ||= { email: email, full_name: auth['info']['name'] } |
||||
end |
||||
|
||||
def handle_unverified_request; true end |
||||
|
||||
end |
@ -0,0 +1,15 @@
|
||||
module Users::AuthenticationsHelper |
||||
def authentication_provider_column(record, column) |
||||
case record.provider |
||||
when 'google_apps' |
||||
ret = <<-DOC |
||||
<span class="btn btn-block btn-social btn-google-plus"> |
||||
<i class="fa fa-google-plus"></i> Google |
||||
</span> |
||||
DOC |
||||
ret.html_safe |
||||
else |
||||
record.provider.camelcase |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,3 @@
|
||||
class Authentication < ActiveRecord::Base |
||||
belongs_to :user, :inverse_of => :authentications |
||||
end |
@ -1,14 +1,20 @@
|
||||
<%= render :partial => "users/shared/links" %> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: confirmation_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Resend confirmation instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
<div class="row"> |
||||
<div class="col-lg-offset-4 col-lg-4 well"> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: confirmation_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Resend confirmation instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
|
||||
</div> |
||||
</div> |
@ -1,14 +1,20 @@
|
||||
<%= render :partial => "users/shared/links" %> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: password_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Send me reset password instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
<div class="row"> |
||||
<div class="col-lg-offset-4 col-lg-4 well"> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: password_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Send me reset password instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
|
||||
</div> |
||||
</div> |
@ -1,4 +1,9 @@
|
||||
<%= render :partial => "users/shared/links" %> |
||||
|
||||
<%= render 'users/registrations/new' %> |
||||
<%= render 'users/shared/links' %> |
||||
|
||||
<div class="row"> |
||||
<div class="col-lg-offset-4 col-lg-4 well"> |
||||
|
||||
<%= render 'users/registrations/new' %> |
||||
|
||||
</div> |
||||
</div> |
||||
|
@ -1,19 +1,36 @@
|
||||
<%= render :partial => "users/shared/links" %> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: session_path(resource_name) |
||||
) do |f| %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
<%= f.input :password, required: true %> |
||||
<% if devise_mapping.rememberable? -%> |
||||
<%= f.input :remember_me, as: :boolean %> |
||||
<% end -%> |
||||
|
||||
<%= f.submit "Sign in", class: 'btn btn-primary' %> |
||||
<small> |
||||
or <%= link_to "Sign up", new_registration_path(resource_name) %> |
||||
/ <%= link_to 'Forgot your password?', new_password_path(resource_name) %> |
||||
</small> |
||||
<% end %> |
||||
<%= render 'users/shared/links' %> |
||||
|
||||
<div class="row"> |
||||
<div class="col-lg-offset-4 col-lg-4 well"> |
||||
|
||||
<p> |
||||
<%= link_to user_omniauth_authorize_path(:google_apps), |
||||
class: 'btn btn-block btn-social btn-google-plus', |
||||
'data-no-turbolink' => true do %> |
||||
<i class="fa fa-google-plus"></i> Sign in with Google |
||||
<% end %> |
||||
</p> |
||||
|
||||
<h5 class="text-info text-center text-separator">Or use the form below</h5> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: session_path(resource_name) |
||||
) do |f| %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
<%= f.input :password, required: true %> |
||||
<% if devise_mapping.rememberable? -%> |
||||
<%= f.input :remember_me, as: :boolean %> |
||||
<% end -%> |
||||
|
||||
<%= f.submit "Sign in", class: 'btn btn-primary' %> |
||||
<small> |
||||
or <%= link_to "Sign up", new_registration_path(resource_name) %> |
||||
/ <%= link_to 'Forgot password', new_password_path(resource_name) %> |
||||
</small> |
||||
|
||||
<% end %> |
||||
|
||||
</div> |
||||
</div> |
@ -1,10 +1,10 @@
|
||||
<br /> |
||||
<% semantic_navigation :devise_nav, html: { class: 'nav nav-tabs' } do |n| %> |
||||
<% semantic_navigation :devise_nav, html: { class: 'nav nav-tabs nav-justified' } do |n| %> |
||||
<%= n.item "Sign in", link: new_session_path(resource_name) %> |
||||
<%= n.item "Sign up", link: new_registration_path(resource_name) %> |
||||
<%= n.item "Forgot your password?", link: new_password_path(resource_name), |
||||
<%= n.item "Forgot password", link: new_password_path(resource_name), |
||||
highlights_on: [{ controller: 'devise/passwords' }] %> |
||||
<%= n.item "Didn't receive confirmation instructions?", link: new_confirmation_path(resource_name) %> |
||||
<%= n.item "Didn't receive unlock instructions?", link: new_unlock_path(resource_name) %> |
||||
<%= n.item "Resend confirmation instructions", link: new_confirmation_path(resource_name) %> |
||||
<%= n.item "Resend unlock instructions", link: new_unlock_path(resource_name) %> |
||||
<% end %> |
||||
</br> |
||||
|
@ -1,14 +1,20 @@
|
||||
<%= render :partial => "users/shared/links" %> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: unlock_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Resend unlock instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
<div class="row"> |
||||
<div class="col-lg-offset-4 col-lg-4 well"> |
||||
|
||||
<%= simple_form_for(resource, |
||||
as: resource_name, |
||||
url: unlock_path(resource_name), |
||||
method: :post |
||||
) do |f| %> |
||||
|
||||
<%= devise_error_messages! %> |
||||
|
||||
<%= f.input :email, required: true %> |
||||
|
||||
<%= f.submit "Resend unlock instructions", class: 'btn btn-primary' %> |
||||
<% end %> |
||||
|
||||
</div> |
||||
</div> |
@ -0,0 +1,14 @@
|
||||
class CreateAuthentications < ActiveRecord::Migration |
||||
def change |
||||
create_table :authentications do |t| |
||||
t.references :user, index: true |
||||
t.string :provider, null: false |
||||
t.string :uid, null: false |
||||
t.string :token |
||||
t.string :secret |
||||
t.string :name |
||||
|
||||
t.timestamps |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,15 @@
|
||||
require "spec_helper" |
||||
|
||||
describe Users::AuthenticationsController do |
||||
describe "routing" do |
||||
|
||||
it "routes to #index" do |
||||
get("/authentications").should route_to("users/authentications#index") |
||||
end |
||||
|
||||
it "routes to #destroy" do |
||||
delete("/authentications/1").should route_to("users/authentications#destroy", :id => "1") |
||||
end |
||||
|
||||
end |
||||
end |
@ -0,0 +1,57 @@
|
||||
/* |
||||
* Social Buttons for Bootstrap |
||||
* |
||||
* Copyright 2013 Panayiotis Lipiridis |
||||
* Licensed under the MIT License |
||||
* |
||||
* https://github.com/lipis/bootstrap-social |
||||
*/ |
||||
|
||||
.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} |
||||
.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} |
||||
.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} |
||||
.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} |
||||
.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} |
||||
.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} |
||||
.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} |
||||
.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} |
||||
.btn-social-icon :first-child{border:none;text-align:center;width:100% !important} |
||||
.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} |
||||
.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} |
||||
.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} |
||||
.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{color:#fff;background-color:#183c60;border-color:rgba(0,0,0,0.2)} |
||||
.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{background-image:none} |
||||
.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)} |
||||
.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d70b7;border-color:rgba(0,0,0,0.2)} |
||||
.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{background-image:none} |
||||
.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} |
||||
.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{color:#fff;background-color:#30487b;border-color:rgba(0,0,0,0.2)} |
||||
.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{background-image:none} |
||||
.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} |
||||
.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{color:#fff;background-color:#d6006f;border-color:rgba(0,0,0,0.2)} |
||||
.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{background-image:none} |
||||
.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} |
||||
.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{color:#fff;background-color:#303030;border-color:rgba(0,0,0,0.2)} |
||||
.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{background-image:none} |
||||
.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)} |
||||
.btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{color:#fff;background-color:#ca3523;border-color:rgba(0,0,0,0.2)} |
||||
.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{background-image:none} |
||||
.btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} |
||||
.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{color:#fff;background-color:#335d7e;border-color:rgba(0,0,0,0.2)} |
||||
.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{background-image:none} |
||||
.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} |
||||
.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{color:#fff;background-color:#005f8d;border-color:rgba(0,0,0,0.2)} |
||||
.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{background-image:none} |
||||
.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} |
||||
.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover,.btn-pinterest:focus,.btn-pinterest:active,.btn-pinterest.active,.open .dropdown-toggle.btn-pinterest{color:#fff;background-color:#a81a20;border-color:rgba(0,0,0,0.2)} |
||||
.btn-pinterest:active,.btn-pinterest.active,.open .dropdown-toggle.btn-pinterest{background-image:none} |
||||
.btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2)} |
||||
.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{color:#fff;background-color:#1f3346;border-color:rgba(0,0,0,0.2)} |
||||
.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{background-image:none} |
||||
.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} |
||||
.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{color:#fff;background-color:#309aea;border-color:rgba(0,0,0,0.2)} |
||||
.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{background-image:none} |
||||
.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)} |
||||
.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{color:#fff;background-color:#4a6a89;border-color:rgba(0,0,0,0.2)} |
||||
.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{background-image:none} |
||||
.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} |
Loading…
Reference in new issue