the_role 1.7.0 → 2.0.0
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/.travis.yml +5 -0
- data/README.md +139 -114
- data/app/assets/stylesheets/the_role.css.scss +47 -0
- data/app/controllers/admin/role_sections_controller.rb +8 -6
- data/app/controllers/admin/roles_controller.rb +9 -6
- data/app/controllers/the_role_controller.rb +18 -0
- data/app/models/concerns/role_model.rb +124 -0
- data/app/models/concerns/the_role_base.rb +30 -0
- data/app/models/concerns/the_role_user_model.rb +45 -0
- data/app/views/admin/roles/_role.html.haml +54 -53
- data/app/views/admin/roles/_sidebar.html.haml +4 -1
- data/app/views/admin/roles/edit.html.haml +2 -2
- data/app/views/admin/roles/index.haml +2 -2
- data/app/views/admin/roles/new.html.haml +18 -17
- data/lib/generators/the_role/USAGE +19 -0
- data/lib/generators/the_role/templates/the_role.rb +5 -0
- data/lib/generators/the_role/the_role_generator.rb +23 -0
- data/lib/the_role/config.rb +20 -0
- data/lib/the_role/hash.rb +23 -30
- data/lib/the_role/param_helper.rb +5 -11
- data/lib/the_role/version.rb +1 -1
- data/lib/the_role.rb +15 -14
- data/the_role.gemspec +2 -2
- metadata +20 -18
- data/app/assets/javascripts/admin_the_role.js +0 -4
- data/app/assets/javascripts/bootstrap-alert.js +0 -90
- data/app/assets/javascripts/bootstrap-dropdown.js +0 -100
- data/app/assets/stylesheets/admin_the_role.css +0 -6
- data/app/assets/stylesheets/custom.css +0 -3
- data/app/assets/stylesheets/headers.css +0 -12
- data/app/assets/stylesheets/reset.css +0 -117
- data/app/assets/stylesheets/role_base.css +0 -1739
- data/lib/the_role/engine.rb +0 -16
- data/lib/the_role/modules/base.rb +0 -30
- data/lib/the_role/modules/controller_requires.rb +0 -17
- data/lib/the_role/modules/role_model.rb +0 -121
- data/lib/the_role/modules/user_model.rb +0 -31
@@ -0,0 +1,45 @@
|
|
1
|
+
module TheRoleUserModel
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
include TheRoleBase
|
5
|
+
|
6
|
+
included do
|
7
|
+
belongs_to :role
|
8
|
+
before_validation :set_default_role, on: :create
|
9
|
+
after_save { |user| user.instance_variable_set(:@role_hash, nil) }
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def with_role name
|
14
|
+
Role.where(name: name).first.users
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def role_hash; @role_hash ||= role.try(:to_hash) || {} end
|
19
|
+
|
20
|
+
# FALSE if object is nil
|
21
|
+
# If object is a USER - check for youself
|
22
|
+
# Check for owner field - :user_id
|
23
|
+
# Check for owner _object_ if owner field is not :user_id
|
24
|
+
def owner? obj
|
25
|
+
return false unless obj
|
26
|
+
return true if admin?
|
27
|
+
|
28
|
+
section_name = obj.class.to_s.tableize
|
29
|
+
return true if moderator?(section_name)
|
30
|
+
|
31
|
+
return id == obj.id if obj.is_a?(User)
|
32
|
+
return id == obj[:user_id] if obj[:user_id]
|
33
|
+
return id == obj[:user][:id] if obj[:user]
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def set_default_role
|
40
|
+
unless role
|
41
|
+
default_role = Role.where(name: TheRole.config.default_user_role).first
|
42
|
+
self.role = default_role if default_role
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,53 +1,54 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
%
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
%
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
%
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
.section
|
16
|
-
|
17
|
-
|
18
|
-
.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
.rule
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
.
|
28
|
-
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
%
|
33
|
-
|
34
|
-
%
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
=
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
1
|
+
- content_for :role_main do
|
2
|
+
.well
|
3
|
+
%h3
|
4
|
+
%b= t '.role_name'
|
5
|
+
= role.name
|
6
|
+
|
7
|
+
%h5
|
8
|
+
%b= t '.title'
|
9
|
+
= role.title
|
10
|
+
|
11
|
+
%p.description
|
12
|
+
%b= t '.role_description'
|
13
|
+
= role.description
|
14
|
+
|
15
|
+
- role.to_hash.each_pair do |section, rules|
|
16
|
+
.section
|
17
|
+
%h3= section
|
18
|
+
.delete
|
19
|
+
.btn-group
|
20
|
+
= button_to t('.delete_section'), admin_role_section_path(role, section), :method => :delete, :class => 'btn btn-danger', :confirm => t('.section_delete_confirm')
|
21
|
+
|
22
|
+
- rules.each_pair do |rule, value|
|
23
|
+
.rule
|
24
|
+
%h4
|
25
|
+
→
|
26
|
+
= rule
|
27
|
+
.controls
|
28
|
+
.btn-group
|
29
|
+
- klass = value ? :success : :info
|
30
|
+
- state = value ? t('.enable') : t('.disable')
|
31
|
+
%button{ :class => "btn btn-#{klass}" }= state
|
32
|
+
%button{ :class => "btn btn-#{klass} dropdown-toggle", 'data-toggle' => :dropdown }
|
33
|
+
%span.caret
|
34
|
+
%ul.dropdown-menu
|
35
|
+
%li.success= link_to t('.enable'), rule_on_admin_role_section_path(role, section, :name => rule), :method => :put
|
36
|
+
%li.info= link_to t('.disable'), rule_off_admin_role_section_path(role, section, :name => rule), :method => :put
|
37
|
+
%li.divider
|
38
|
+
%li.error= link_to t('.delete_rule'), destroy_rule_admin_role_section_path(role, section, :name => rule), :method => :delete, :confirm => t('.rule_delete_confirm')
|
39
|
+
|
40
|
+
%h4= t '.create_section'
|
41
|
+
|
42
|
+
= form_tag admin_role_sections_path(role), :class => 'well form-inline' do |f|
|
43
|
+
= text_field_tag :section_name, '', :class => 'input-xlarge', :placeholder => t('.new_section_placeholder')
|
44
|
+
= submit_tag t('.create_section'), :class => :btn
|
45
|
+
|
46
|
+
%h4= t '.create_rule'
|
47
|
+
|
48
|
+
= form_tag create_rule_admin_role_sections_path(role), :class => 'well form-inline' do |f|
|
49
|
+
%select.span3{ :name => :section_name }
|
50
|
+
- role.to_hash.each_pair do |section, rules|
|
51
|
+
%option{ :value => section }= section
|
52
|
+
|
53
|
+
= text_field_tag :rule_name, '', :class => 'input-large', :placeholder => t('.new_rule_placeholder')
|
54
|
+
= submit_tag t('.create_rule'), :class => :btn
|
@@ -1,8 +1,11 @@
|
|
1
|
-
- content_for :
|
1
|
+
- content_for :role_sidebar do
|
2
|
+
%h3= link_to raw('← Home'), root_path
|
3
|
+
%br
|
2
4
|
%h3= t '.roles_list'
|
3
5
|
- (@roles || Role.all).each do |role|
|
4
6
|
%p
|
5
7
|
= link_to role.title, edit_admin_role_url(role)
|
8
|
+
(#{role.users.count})
|
6
9
|
= link_to raw('×'), admin_role_url(role), :method => :delete, :title => role.title, :confirm => t('.delete_role_confirm'), :class => :delete
|
7
10
|
|
8
11
|
%p.new= link_to t('.new_role'), new_admin_role_path
|
@@ -1,2 +1,2 @@
|
|
1
|
-
= render :
|
2
|
-
= render :
|
1
|
+
= render partial: 'sidebar'
|
2
|
+
= render partial: 'role', locals: { role: @role }
|
@@ -1,2 +1,2 @@
|
|
1
|
-
= render :
|
2
|
-
= render :
|
1
|
+
= render partial: 'sidebar'
|
2
|
+
= render partial: 'role', locals: { role: @roles.first }
|
@@ -1,23 +1,24 @@
|
|
1
|
-
= render :
|
1
|
+
= render partial: 'sidebar'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
- content_for :role_main do
|
4
|
+
.well
|
5
|
+
- @role.errors.each do |field, message|
|
6
|
+
%p
|
7
|
+
= field
|
8
|
+
\:
|
9
|
+
= message
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
.form
|
12
|
+
%h3= raw t('.create')
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
= form_for(@role, :url => admin_roles_path) do |f|
|
15
|
+
%label= t('.name')
|
16
|
+
%p= f.text_field :name
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
%label= t('.title')
|
19
|
+
%p= f.text_field :title
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
%label= t('.description')
|
22
|
+
%p= f.text_field :description
|
22
23
|
|
23
|
-
|
24
|
+
= f.submit t('.create'), :class => :btn
|
@@ -0,0 +1,19 @@
|
|
1
|
+
---------------------------------------
|
2
|
+
TheRole
|
3
|
+
---------------------------------------
|
4
|
+
|
5
|
+
Description:
|
6
|
+
This generators helps to install TheRole gem into your Application
|
7
|
+
|
8
|
+
This text:
|
9
|
+
bundle exec rails g the_role --help
|
10
|
+
|
11
|
+
Generators:
|
12
|
+
bundle exec rails g the_role install
|
13
|
+
|
14
|
+
Migrations:
|
15
|
+
bundle exec rake the_role_engine:install:migrations
|
16
|
+
|
17
|
+
---------------------------------------
|
18
|
+
TheRole
|
19
|
+
---------------------------------------
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class TheRoleGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
3
|
+
# argument :xname, type: :string, default: :xname
|
4
|
+
|
5
|
+
def generate_controllers
|
6
|
+
if gen_name == 'install'
|
7
|
+
cp_setup
|
8
|
+
else
|
9
|
+
puts 'TheComments Generator - wrong Name'
|
10
|
+
puts 'Try to use install'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def gen_name
|
17
|
+
name.to_s.downcase
|
18
|
+
end
|
19
|
+
|
20
|
+
def cp_setup
|
21
|
+
copy_file 'the_role.rb', 'config/initializers/the_role.rb'
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module TheRole
|
2
|
+
def self.configure(&block)
|
3
|
+
yield @config ||= TheRole::Configuration.new
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.config
|
7
|
+
@config
|
8
|
+
end
|
9
|
+
|
10
|
+
# Configuration class
|
11
|
+
class Configuration
|
12
|
+
include ActiveSupport::Configurable
|
13
|
+
config_accessor :layout, :default_user_role
|
14
|
+
end
|
15
|
+
|
16
|
+
configure do |config|
|
17
|
+
config.layout = :application
|
18
|
+
config.default_user_role = nil
|
19
|
+
end
|
20
|
+
end
|
data/lib/the_role/hash.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
# load 'the_role/hash.rb' - UPDATE, BUT NOT RELOAD [for console testing]
|
2
|
-
|
3
2
|
class Hash
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# RAILS 4 like methods for RAILS 3
|
10
|
-
# DEEP TRANSFORM HELPER METHODS
|
11
|
-
unless respond_to? :deep_transform_keys
|
3
|
+
# deep_transform_keys
|
4
|
+
# deep_stringify_keys
|
5
|
+
# underscorify_keys
|
6
|
+
# deep_reset
|
7
|
+
unless {}.respond_to?(:deep_transform_keys)
|
12
8
|
def deep_transform_keys(&block)
|
13
9
|
result = {}
|
14
10
|
each do |key, value|
|
@@ -24,12 +20,9 @@ class Hash
|
|
24
20
|
end
|
25
21
|
self
|
26
22
|
end
|
27
|
-
puts "[TheRole] RAILS 4 like method **deep_transform_keys** mixed to HASH class"
|
28
23
|
end
|
29
24
|
|
30
|
-
|
31
|
-
# DEEP TRANSFORM HELPER METHODS
|
32
|
-
unless respond_to? :deep_stringify_keys
|
25
|
+
unless {}.respond_to?(:deep_stringify_keys)
|
33
26
|
def deep_stringify_keys
|
34
27
|
deep_transform_keys{ |key| key.to_s }
|
35
28
|
end
|
@@ -37,29 +30,29 @@ class Hash
|
|
37
30
|
def deep_stringify_keys!
|
38
31
|
deep_transform_keys!{ |key| key.to_s }
|
39
32
|
end
|
40
|
-
puts "[TheRole] RAILS 4 like method **deep_stringify_keys** mixed to HASH class"
|
41
33
|
end
|
42
34
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
35
|
+
unless {}.respond_to?(:underscorify_keys)
|
36
|
+
def underscorify_keys
|
37
|
+
deep_transform_keys{ |key| TheRoleParam.process(key) }
|
38
|
+
end
|
48
39
|
|
49
|
-
|
50
|
-
|
40
|
+
def underscorify_keys!
|
41
|
+
replace underscorify_keys
|
42
|
+
end
|
51
43
|
end
|
52
44
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
45
|
+
unless {}.respond_to?(:deep_reset)
|
46
|
+
def deep_reset(default = nil)
|
47
|
+
hash = dup
|
48
|
+
hash.each do |key, value|
|
49
|
+
hash[key] = hash[key].is_a?(Hash) ? hash[key].deep_reset(default) : default
|
50
|
+
end
|
51
|
+
hash
|
58
52
|
end
|
59
|
-
hash
|
60
|
-
end
|
61
53
|
|
62
|
-
|
63
|
-
|
54
|
+
def deep_reset!(default = nil)
|
55
|
+
replace deep_reset(default)
|
56
|
+
end
|
64
57
|
end
|
65
58
|
end
|
@@ -1,15 +1,9 @@
|
|
1
1
|
require "active_support/inflector"
|
2
2
|
|
3
|
-
#
|
3
|
+
# TheRoleParam.process 'hello world'
|
4
4
|
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
param.to_s.parameterize.underscore
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.prepare param
|
12
|
-
param.to_s.parameterize.underscore
|
13
|
-
end
|
5
|
+
module TheRoleParam
|
6
|
+
def self.process param
|
7
|
+
param.to_s.parameterize.underscore
|
14
8
|
end
|
15
|
-
end
|
9
|
+
end
|
data/lib/the_role/version.rb
CHANGED
data/lib/the_role.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
require 'haml'
|
2
2
|
|
3
|
-
require 'the_role/param_helper'
|
4
3
|
require 'the_role/hash'
|
5
|
-
|
6
|
-
require 'the_role/engine'
|
4
|
+
require 'the_role/config'
|
7
5
|
require 'the_role/version'
|
8
|
-
require 'the_role/
|
9
|
-
|
10
|
-
require 'the_role/modules/base'
|
11
|
-
require 'the_role/modules/user_model'
|
12
|
-
require 'the_role/modules/role_model'
|
13
|
-
require 'the_role/modules/controller_requires'
|
6
|
+
require 'the_role/param_helper'
|
14
7
|
|
15
8
|
module TheRole
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
9
|
+
class Engine < Rails::Engine
|
10
|
+
initializer "TheRole precompile hook", :group => :all do |app|
|
11
|
+
app.config.assets.precompile += %w( admin_the_role.js admin_the_role.css )
|
12
|
+
end
|
13
|
+
|
14
|
+
# http://stackoverflow.com/questions/6279325/adding-to-rails-autoload-path-from-gem
|
15
|
+
|
16
|
+
# config.to_prepare do
|
17
|
+
# Role.send :include, TheRole::RoleModel if the_class_exists? :Role
|
18
|
+
# User.send :include, TheRole::UserModel if the_class_exists? :User
|
19
|
+
# ApplicationController.send :include, TheRole::Requires if the_class_exists? :ApplicationController
|
20
|
+
# end
|
21
|
+
end
|
21
22
|
end
|
data/the_role.gemspec
CHANGED
@@ -13,10 +13,10 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.rubyforge_project = "the_role"
|
15
15
|
|
16
|
-
s.files = `git ls-files`.split("\n")
|
16
|
+
s.files = `git ls-files`.split("\n").select{ |file_name| !(file_name =~ /^spec/) }
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_dependency 'haml'
|
22
|
-
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: the_role
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: haml
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,12 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
description: Authorization lib for Rails 3 with Web Interface, aka CanCan killer
|
26
31
|
email:
|
27
32
|
- zykin-ilya@ya.ru
|
@@ -31,20 +36,18 @@ extra_rdoc_files: []
|
|
31
36
|
files:
|
32
37
|
- .gitignore
|
33
38
|
- .rvmrc.example
|
39
|
+
- .travis.yml
|
34
40
|
- Bye_bye_CanCan_I_got_the_Role.png
|
35
41
|
- Gemfile
|
36
42
|
- README.md
|
37
43
|
- Rakefile
|
38
|
-
- app/assets/
|
39
|
-
- app/assets/javascripts/bootstrap-alert.js
|
40
|
-
- app/assets/javascripts/bootstrap-dropdown.js
|
41
|
-
- app/assets/stylesheets/admin_the_role.css
|
42
|
-
- app/assets/stylesheets/custom.css
|
43
|
-
- app/assets/stylesheets/headers.css
|
44
|
-
- app/assets/stylesheets/reset.css
|
45
|
-
- app/assets/stylesheets/role_base.css
|
44
|
+
- app/assets/stylesheets/the_role.css.scss
|
46
45
|
- app/controllers/admin/role_sections_controller.rb
|
47
46
|
- app/controllers/admin/roles_controller.rb
|
47
|
+
- app/controllers/the_role_controller.rb
|
48
|
+
- app/models/concerns/role_model.rb
|
49
|
+
- app/models/concerns/the_role_base.rb
|
50
|
+
- app/models/concerns/the_role_user_model.rb
|
48
51
|
- app/views/admin/roles/_form.haml
|
49
52
|
- app/views/admin/roles/_role.html.haml
|
50
53
|
- app/views/admin/roles/_sidebar.html.haml
|
@@ -58,14 +61,13 @@ files:
|
|
58
61
|
- config/locales/zh_CN.yml
|
59
62
|
- config/routes.rb
|
60
63
|
- db/migrate/20111025025129_create_roles.rb
|
64
|
+
- lib/generators/the_role/USAGE
|
65
|
+
- lib/generators/the_role/templates/the_role.rb
|
66
|
+
- lib/generators/the_role/the_role_generator.rb
|
61
67
|
- lib/tasks/roles.rake
|
62
68
|
- lib/the_role.rb
|
63
|
-
- lib/the_role/
|
69
|
+
- lib/the_role/config.rb
|
64
70
|
- lib/the_role/hash.rb
|
65
|
-
- lib/the_role/modules/base.rb
|
66
|
-
- lib/the_role/modules/controller_requires.rb
|
67
|
-
- lib/the_role/modules/role_model.rb
|
68
|
-
- lib/the_role/modules/user_model.rb
|
69
71
|
- lib/the_role/param_helper.rb
|
70
72
|
- lib/the_role/the_class_exists.rb
|
71
73
|
- lib/the_role/version.rb
|
@@ -91,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
93
|
version: '0'
|
92
94
|
requirements: []
|
93
95
|
rubyforge_project: the_role
|
94
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.25
|
95
97
|
signing_key:
|
96
98
|
specification_version: 3
|
97
99
|
summary: Authorization lib for Rails 3 with Web Interface, aka CanCan killer
|
@@ -1,90 +0,0 @@
|
|
1
|
-
/* ==========================================================
|
2
|
-
* bootstrap-alert.js v2.0.4
|
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"; // jshint ;_;
|
24
|
-
|
25
|
-
|
26
|
-
/* ALERT CLASS DEFINITION
|
27
|
-
* ====================== */
|
28
|
-
|
29
|
-
var dismiss = '[data-dismiss="alert"]'
|
30
|
-
, Alert = function (el) {
|
31
|
-
$(el).on('click', dismiss, this.close)
|
32
|
-
}
|
33
|
-
|
34
|
-
Alert.prototype.close = function (e) {
|
35
|
-
var $this = $(this)
|
36
|
-
, selector = $this.attr('data-target')
|
37
|
-
, $parent
|
38
|
-
|
39
|
-
if (!selector) {
|
40
|
-
selector = $this.attr('href')
|
41
|
-
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
42
|
-
}
|
43
|
-
|
44
|
-
$parent = $(selector)
|
45
|
-
|
46
|
-
e && e.preventDefault()
|
47
|
-
|
48
|
-
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
|
49
|
-
|
50
|
-
$parent.trigger(e = $.Event('close'))
|
51
|
-
|
52
|
-
if (e.isDefaultPrevented()) return
|
53
|
-
|
54
|
-
$parent.removeClass('in')
|
55
|
-
|
56
|
-
function removeElement() {
|
57
|
-
$parent
|
58
|
-
.trigger('closed')
|
59
|
-
.remove()
|
60
|
-
}
|
61
|
-
|
62
|
-
$.support.transition && $parent.hasClass('fade') ?
|
63
|
-
$parent.on($.support.transition.end, removeElement) :
|
64
|
-
removeElement()
|
65
|
-
}
|
66
|
-
|
67
|
-
|
68
|
-
/* ALERT PLUGIN DEFINITION
|
69
|
-
* ======================= */
|
70
|
-
|
71
|
-
$.fn.alert = function (option) {
|
72
|
-
return this.each(function () {
|
73
|
-
var $this = $(this)
|
74
|
-
, data = $this.data('alert')
|
75
|
-
if (!data) $this.data('alert', (data = new Alert(this)))
|
76
|
-
if (typeof option == 'string') data[option].call($this)
|
77
|
-
})
|
78
|
-
}
|
79
|
-
|
80
|
-
$.fn.alert.Constructor = Alert
|
81
|
-
|
82
|
-
|
83
|
-
/* ALERT DATA-API
|
84
|
-
* ============== */
|
85
|
-
|
86
|
-
$(function () {
|
87
|
-
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
|
88
|
-
})
|
89
|
-
|
90
|
-
}(window.jQuery);
|