jackpot 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +16 -0
- data/.rspec +1 -0
- data/.rvmrc.example +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +181 -0
- data/MIT-LICENSE +20 -0
- data/README.md +134 -0
- data/Rakefile +25 -0
- data/app/assets/images/jackpot/.gitkeep +0 -0
- data/app/assets/javascripts/jackpot/application.js +5 -0
- data/app/assets/javascripts/jackpot/bootstrap.js +32 -0
- data/app/assets/javascripts/jackpot/customers.js +2 -0
- data/app/assets/javascripts/jackpot/login.js +1 -0
- data/app/assets/javascripts/jackpot/payments.js +2 -0
- data/app/assets/javascripts/jackpot/subscriptions.js +2 -0
- data/app/assets/stylesheets/jackpot/application.css +9 -0
- data/app/assets/stylesheets/jackpot/customers.css +4 -0
- data/app/assets/stylesheets/jackpot/jackpot.css +10 -0
- data/app/controllers/jackpot/application_controller.rb +4 -0
- data/app/controllers/jackpot/customers_controller.rb +100 -0
- data/app/controllers/jackpot/payments_controller.rb +20 -0
- data/app/controllers/jackpot/subscriptions_controller.rb +86 -0
- data/app/helpers/jackpot/application_helper.rb +27 -0
- data/app/helpers/jackpot/customers_helper.rb +7 -0
- data/app/helpers/jackpot/subscriptions_helper.rb +4 -0
- data/app/models/jackpot/card.rb +29 -0
- data/app/models/jackpot/customer.rb +48 -0
- data/app/models/jackpot/gateway.rb +28 -0
- data/app/models/jackpot/payment.rb +33 -0
- data/app/models/jackpot/subscription.rb +13 -0
- data/app/models/jackpot/user.rb +25 -0
- data/app/views/jackpot/customers/_credit_card_form.html.erb +42 -0
- data/app/views/jackpot/customers/_form.html.erb +17 -0
- data/app/views/jackpot/customers/edit.html.erb +13 -0
- data/app/views/jackpot/customers/index.html.erb +30 -0
- data/app/views/jackpot/customers/new.html.erb +8 -0
- data/app/views/jackpot/customers/show.html.erb +32 -0
- data/app/views/jackpot/payments/create.html.erb +1 -0
- data/app/views/jackpot/payments/index.html.erb +25 -0
- data/app/views/jackpot/shared/_flash_messages.html.erb +6 -0
- data/app/views/jackpot/shared/_navigation.html.erb +5 -0
- data/app/views/jackpot/subscriptions/_form.html.erb +13 -0
- data/app/views/jackpot/subscriptions/edit.html.erb +6 -0
- data/app/views/jackpot/subscriptions/index.html.erb +29 -0
- data/app/views/jackpot/subscriptions/new.html.erb +4 -0
- data/app/views/jackpot/subscriptions/show.html.erb +23 -0
- data/app/views/layouts/devise.html.erb +22 -0
- data/app/views/layouts/jackpot/application.html.erb +39 -0
- data/config/initializers/jackpot_devise.rb +226 -0
- data/config/locales/devise.en.yml +57 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20111221002616_create_jackpot_payments.rb +11 -0
- data/db/migrate/20111230014003_add_customer_information_to_jackpot_payments.rb +5 -0
- data/db/migrate/20120102223341_create_jackpot_subscriptions.rb +10 -0
- data/db/migrate/20120103211153_create_jackpot_customers.rb +11 -0
- data/db/migrate/20120104164830_add_credit_card_number_to_customer.rb +5 -0
- data/db/migrate/20120130173242_add_credit_card_information_to_customers.rb +7 -0
- data/db/migrate/20120208191815_add_billing_period_to_jackpot_subscriptions.rb +5 -0
- data/db/migrate/20120208191934_add_good_until_date_to_jackpot_customers.rb +6 -0
- data/db/migrate/20120209203542_add_subscription_and_customer_to_jackpot_payments.rb +8 -0
- data/db/migrate/20120209212043_rename_column_token_in_jackpot_payments.rb +5 -0
- data/db/migrate/20120210144038_devise_create_jackpot_users.rb +49 -0
- data/jackpot.gemspec +33 -0
- data/lib/jackpot.rb +23 -0
- data/lib/jackpot/configuration.rb +33 -0
- data/lib/jackpot/cron.rb +22 -0
- data/lib/jackpot/engine.rb +14 -0
- data/lib/jackpot/errors.rb +18 -0
- data/lib/jackpot/factory.rb +26 -0
- data/lib/jackpot/version.rb +3 -0
- data/lib/tasks/jackpot_tasks.rake +38 -0
- data/script/rails +6 -0
- data/spec/controllers/jackpot/customers_controller_spec.rb +170 -0
- data/spec/controllers/jackpot/payments_controller_spec.rb +47 -0
- data/spec/controllers/jackpot/subscriptions_controller_spec.rb +153 -0
- data/spec/dummy/.gitignore +1 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +51 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +17 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +32 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +41 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/jackpot.rb +13 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/db/schema.rb +68 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/index.html +5 -0
- data/spec/dummy/public/payment.html +36 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/fixtures/vcr/Create_Customers_To_bill_monthly_my_customers_As_a_user_I_want_to_record_their_billing_information_/assigning_credit_card_information_to_customer.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/when_persisting/should_NEVER_persist_in_the_database_the_actual_card_number.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/when_persisting/should_NEVER_persist_in_the_database_the_verification_value.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/when_persisting/should_persist_in_the_database_the_ONLY_last_four_digits.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/when_persisting/should_persist_the_card_information.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Customer/_update_credit_card_number/when_card_is_valid/when_persisting/should_store_this_card_at_the_gateway.yml +34 -0
- data/spec/fixtures/vcr/Jackpot_Payment/_create/with_valid_token_information/creates_a_new_payment.yml +96 -0
- data/spec/fixtures/vcr/Jackpot_Payment/_create/with_valid_token_information/does_not_persist_credit_card_token_information.yml +96 -0
- data/spec/fixtures/vcr/Jackpot_Payment/_create/with_valid_token_information/records_the_payment_transaction_id_for_future_reference.yml +96 -0
- data/spec/fixtures/vcr/Jackpot_Payment/_create/with_valid_token_information/records_this_payment_information.yml +96 -0
- data/spec/fixtures/vcr/Jackpot_Payment/_customer_name/returns_its_customer_email.yml +96 -0
- data/spec/fixtures/vcr/jackpot/customer/updatecard.yml +34 -0
- data/spec/fixtures/vcr/jackpot/customer_expiration_date.yml +34 -0
- data/spec/fixtures/vcr/jackpot/receiving_payments.yml +96 -0
- data/spec/helpers/jackpot/customers_helper_spec.rb +16 -0
- data/spec/helpers/jackpot/subscriptions_helper_spec.rb +4 -0
- data/spec/lib/cron_spec.rb +39 -0
- data/spec/lib/factory_spec.rb +40 -0
- data/spec/models/jackpot/card_spec.rb +23 -0
- data/spec/models/jackpot/customer_spec.rb +140 -0
- data/spec/models/jackpot/gateway_spec.rb +22 -0
- data/spec/models/jackpot/payment_spec.rb +74 -0
- data/spec/models/jackpot/subscription_spec.rb +19 -0
- data/spec/requests/jackpot/jackpot_assign_subscription_to_customer_spec.rb +39 -0
- data/spec/requests/jackpot/jackpot_create_customer_spec.rb +73 -0
- data/spec/requests/jackpot/jackpot_create_subscriptions_spec.rb +27 -0
- data/spec/requests/jackpot/jackpot_receive_payments_spec.rb +34 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/support/active_merchant.rb +1 -0
- data/spec/support/capybara.rb +6 -0
- data/spec/support/devise.rb +21 -0
- data/spec/support/factories/jackpot_customers.rb +36 -0
- data/spec/support/factories/jackpot_payments.rb +7 -0
- data/spec/support/factories/jackpot_subscriptions.rb +9 -0
- data/spec/support/factories/jackpot_users.rb +9 -0
- data/spec/support/helpers.rb +16 -0
- data/spec/support/routes.rb +3 -0
- data/spec/support/vcr.rb +10 -0
- data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
- data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
- data/vendor/assets/javascripts/twitter/bootstrap.js +12 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alert.js +91 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-button.js +98 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-carousel.js +154 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-collapse.js +136 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js +92 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js +209 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js +95 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js +125 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tab.js +130 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tooltip.js +270 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-transition.js +51 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-typeahead.js +271 -0
- data/vendor/assets/stylesheets/twitter/bootstrap/bootstrap-responsive.css +567 -0
- data/vendor/assets/stylesheets/twitter/bootstrap/bootstrap.css.erb +3366 -0
- metadata +351 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
feature "Create subscriptions", %q{
|
|
5
|
+
To provide subscriptions options to my customers
|
|
6
|
+
As a user
|
|
7
|
+
I want to be able to record their pricing and name
|
|
8
|
+
} do
|
|
9
|
+
|
|
10
|
+
let(:user) { Factory(:user) }
|
|
11
|
+
background do
|
|
12
|
+
sign_in user
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
scenario "creating a new subscription" do
|
|
16
|
+
visit subscriptions_path
|
|
17
|
+
click_link "New Subscription"
|
|
18
|
+
|
|
19
|
+
fill_in "subscription[name]" , with: "Gold"
|
|
20
|
+
fill_in "subscription[price]", with: "30"
|
|
21
|
+
|
|
22
|
+
click_button('Create Subscription')
|
|
23
|
+
|
|
24
|
+
page.should have_css(".alert.alert-success")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
feature "Receive Payments", %q{
|
|
4
|
+
To earn money
|
|
5
|
+
As a user
|
|
6
|
+
I want to be able to bill credit cards from my customers
|
|
7
|
+
} do
|
|
8
|
+
|
|
9
|
+
let(:customer) { Factory(:customer_with_subscription_and_valid_card,
|
|
10
|
+
:email => "john@doe.com") }
|
|
11
|
+
let(:user) { Factory(:user) }
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
sign_in user
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# TODO: Rewrite this test making it access the API instead
|
|
18
|
+
scenario "receiving payment" , :vcr => { :cassette_name => "jackpot/receiving_payments" } do
|
|
19
|
+
# Dummy html form to simulate a user entering data
|
|
20
|
+
visit "/payment.html"
|
|
21
|
+
|
|
22
|
+
within "form" do
|
|
23
|
+
fill_in "customer_id", :with => "#{customer.id}"
|
|
24
|
+
click_button 'confirm'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
page.should have_content("success")
|
|
28
|
+
within('#latest-payments') do
|
|
29
|
+
page.should have_content('john@doe.com')
|
|
30
|
+
page.should have_content('$3,000.00')
|
|
31
|
+
page.should have_content('less than a minute')
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Configure Rails Envinronment
|
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
|
3
|
+
|
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
5
|
+
|
|
6
|
+
require 'rspec/rails'
|
|
7
|
+
require 'capybara/rspec'
|
|
8
|
+
require 'shoulda-matchers'
|
|
9
|
+
require 'database_cleaner'
|
|
10
|
+
require 'factory_girl_rails'
|
|
11
|
+
require 'vcr'
|
|
12
|
+
|
|
13
|
+
ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
|
|
14
|
+
|
|
15
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
16
|
+
# in spec/support/ and its subdirectories.
|
|
17
|
+
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
|
|
18
|
+
|
|
19
|
+
RSpec.configure do |config|
|
|
20
|
+
config.use_transactional_fixtures = false
|
|
21
|
+
|
|
22
|
+
config.before(:suite) do
|
|
23
|
+
DatabaseCleaner.strategy = :transaction
|
|
24
|
+
DatabaseCleaner.clean_with(:truncation)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
config.before(:each) do
|
|
28
|
+
DatabaseCleaner.start
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
config.after(:each) do
|
|
32
|
+
DatabaseCleaner.clean
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Jackpot.configure do |c|
|
|
37
|
+
c.gateway_type :braintree
|
|
38
|
+
c.gateway_login 'demo'
|
|
39
|
+
c.gateway_password 'password'
|
|
40
|
+
c.gateway_mode 'test'
|
|
41
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ActiveMerchant::Billing::Base.mode = :test
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
RSpec.configure do |config|
|
|
2
|
+
config.include Devise::TestHelpers, :type => :controller
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
module SignInHelpers
|
|
6
|
+
|
|
7
|
+
def sign_in(user)
|
|
8
|
+
visit new_user_session_path
|
|
9
|
+
fill_in 'Email', :with => user.email
|
|
10
|
+
fill_in 'Password', :with => 'password'
|
|
11
|
+
click_button 'Sign in'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def sign_out
|
|
15
|
+
click_link 'Sign out'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
RSpec.configure do |c|
|
|
20
|
+
c.include SignInHelpers, :type => :request
|
|
21
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Read about factories at http://github.com/thoughtbot/factory_girl
|
|
2
|
+
|
|
3
|
+
FactoryGirl.define do
|
|
4
|
+
factory :customer , class: Jackpot::Customer do
|
|
5
|
+
email
|
|
6
|
+
description "MyText"
|
|
7
|
+
|
|
8
|
+
factory :customer_with_subscription do
|
|
9
|
+
subscription
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
factory :customer_with_valid_card do
|
|
13
|
+
after_create do |customer|
|
|
14
|
+
customer.update_credit_card valid_card
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
factory :customer_with_subscription_and_valid_card , :parent => :customer_with_valid_card do
|
|
19
|
+
subscription
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sequence :email do |n|
|
|
24
|
+
"john#{n}@doe.com"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def valid_card
|
|
31
|
+
@card ||= Jackpot::Card.new(:first_name => 'foo', :last_name => 'bar',
|
|
32
|
+
:number => '5555555555554444',
|
|
33
|
+
:month => 1,
|
|
34
|
+
:year => next_year,
|
|
35
|
+
:verification_value => 123)
|
|
36
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
def next_year
|
|
2
|
+
Time.now.year + 1
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def credit_card(number = '4242424242424242', params = {})
|
|
6
|
+
@credit_card ||= ActiveMerchant::Billing::CreditCard.new credit_card_hash(number, params)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def credit_card_hash(number = '4242424242424242', params={})
|
|
10
|
+
default_opts = { "number" => number,
|
|
11
|
+
"month" => 1,
|
|
12
|
+
"year" => next_year,
|
|
13
|
+
"first_name" => 'John',
|
|
14
|
+
"last_name" => 'Doe',
|
|
15
|
+
"verification_value" => 123 }.reverse_merge(params)
|
|
16
|
+
end
|
data/spec/support/vcr.rb
ADDED
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//= require twitter/bootstrap/bootstrap-transition
|
|
2
|
+
//= require twitter/bootstrap/bootstrap-alert
|
|
3
|
+
//= require twitter/bootstrap/bootstrap-modal
|
|
4
|
+
//= require twitter/bootstrap/bootstrap-dropdown
|
|
5
|
+
//= require twitter/bootstrap/bootstrap-scrollspy
|
|
6
|
+
//= require twitter/bootstrap/bootstrap-tab
|
|
7
|
+
//= require twitter/bootstrap/bootstrap-tooltip
|
|
8
|
+
//= require twitter/bootstrap/bootstrap-popover
|
|
9
|
+
//= require twitter/bootstrap/bootstrap-button
|
|
10
|
+
//= require twitter/bootstrap/bootstrap-collapse
|
|
11
|
+
//= require twitter/bootstrap/bootstrap-carousel
|
|
12
|
+
//= require twitter/bootstrap/bootstrap-typeahead
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* ==========================================================
|
|
2
|
+
* bootstrap-alert.js v2.0.0
|
|
3
|
+
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
|
4
|
+
* ==========================================================
|
|
5
|
+
* Copyright 2012 Twitter, Inc.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
* ========================================================== */
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
!function( $ ){
|
|
22
|
+
|
|
23
|
+
"use strict"
|
|
24
|
+
|
|
25
|
+
/* ALERT CLASS DEFINITION
|
|
26
|
+
* ====================== */
|
|
27
|
+
|
|
28
|
+
var dismiss = '[data-dismiss="alert"]'
|
|
29
|
+
, Alert = function ( el ) {
|
|
30
|
+
$(el).on('click', dismiss, this.close)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Alert.prototype = {
|
|
34
|
+
|
|
35
|
+
constructor: Alert
|
|
36
|
+
|
|
37
|
+
, close: function ( e ) {
|
|
38
|
+
var $this = $(this)
|
|
39
|
+
, selector = $this.attr('data-target')
|
|
40
|
+
, $parent
|
|
41
|
+
|
|
42
|
+
if (!selector) {
|
|
43
|
+
selector = $this.attr('href')
|
|
44
|
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
$parent = $(selector)
|
|
48
|
+
$parent.trigger('close')
|
|
49
|
+
|
|
50
|
+
e && e.preventDefault()
|
|
51
|
+
|
|
52
|
+
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
|
|
53
|
+
|
|
54
|
+
$parent.removeClass('in')
|
|
55
|
+
|
|
56
|
+
function removeElement() {
|
|
57
|
+
$parent.remove()
|
|
58
|
+
$parent.trigger('closed')
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
$.support.transition && $parent.hasClass('fade') ?
|
|
62
|
+
$parent.on($.support.transition.end, removeElement) :
|
|
63
|
+
removeElement()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/* ALERT PLUGIN DEFINITION
|
|
70
|
+
* ======================= */
|
|
71
|
+
|
|
72
|
+
$.fn.alert = function ( option ) {
|
|
73
|
+
return this.each(function () {
|
|
74
|
+
var $this = $(this)
|
|
75
|
+
, data = $this.data('alert')
|
|
76
|
+
if (!data) $this.data('alert', (data = new Alert(this)))
|
|
77
|
+
if (typeof option == 'string') data[option].call($this)
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
$.fn.alert.Constructor = Alert
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
/* ALERT DATA-API
|
|
85
|
+
* ============== */
|
|
86
|
+
|
|
87
|
+
$(function () {
|
|
88
|
+
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
}( window.jQuery )
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
* bootstrap-button.js v2.0.0
|
|
3
|
+
* http://twitter.github.com/bootstrap/javascript.html#buttons
|
|
4
|
+
* ============================================================
|
|
5
|
+
* Copyright 2012 Twitter, Inc.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
* ============================================================ */
|
|
19
|
+
|
|
20
|
+
!function( $ ){
|
|
21
|
+
|
|
22
|
+
"use strict"
|
|
23
|
+
|
|
24
|
+
/* BUTTON PUBLIC CLASS DEFINITION
|
|
25
|
+
* ============================== */
|
|
26
|
+
|
|
27
|
+
var Button = function ( element, options ) {
|
|
28
|
+
this.$element = $(element)
|
|
29
|
+
this.options = $.extend({}, $.fn.button.defaults, options)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
Button.prototype = {
|
|
33
|
+
|
|
34
|
+
constructor: Button
|
|
35
|
+
|
|
36
|
+
, setState: function ( state ) {
|
|
37
|
+
var d = 'disabled'
|
|
38
|
+
, $el = this.$element
|
|
39
|
+
, data = $el.data()
|
|
40
|
+
, val = $el.is('input') ? 'val' : 'html'
|
|
41
|
+
|
|
42
|
+
state = state + 'Text'
|
|
43
|
+
data.resetText || $el.data('resetText', $el[val]())
|
|
44
|
+
|
|
45
|
+
$el[val](data[state] || this.options[state])
|
|
46
|
+
|
|
47
|
+
// push to event loop to allow forms to submit
|
|
48
|
+
setTimeout(function () {
|
|
49
|
+
state == 'loadingText' ?
|
|
50
|
+
$el.addClass(d).attr(d, d) :
|
|
51
|
+
$el.removeClass(d).removeAttr(d)
|
|
52
|
+
}, 0)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
, toggle: function () {
|
|
56
|
+
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
|
|
57
|
+
|
|
58
|
+
$parent && $parent
|
|
59
|
+
.find('.active')
|
|
60
|
+
.removeClass('active')
|
|
61
|
+
|
|
62
|
+
this.$element.toggleClass('active')
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/* BUTTON PLUGIN DEFINITION
|
|
69
|
+
* ======================== */
|
|
70
|
+
|
|
71
|
+
$.fn.button = function ( option ) {
|
|
72
|
+
return this.each(function () {
|
|
73
|
+
var $this = $(this)
|
|
74
|
+
, data = $this.data('button')
|
|
75
|
+
, options = typeof option == 'object' && option
|
|
76
|
+
if (!data) $this.data('button', (data = new Button(this, options)))
|
|
77
|
+
if (option == 'toggle') data.toggle()
|
|
78
|
+
else if (option) data.setState(option)
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
$.fn.button.defaults = {
|
|
83
|
+
loadingText: 'loading...'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
$.fn.button.Constructor = Button
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
/* BUTTON DATA-API
|
|
90
|
+
* =============== */
|
|
91
|
+
|
|
92
|
+
$(function () {
|
|
93
|
+
$('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
|
|
94
|
+
$(e.target).button('toggle')
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
}( window.jQuery )
|