flipper-ui 0.21.0.rc1 → 0.22.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/ui/README.md +1 -1
- data/examples/ui/authorization.ru +12 -50
- data/examples/ui/basic.ru +12 -23
- data/lib/flipper/ui/action.rb +48 -1
- data/lib/flipper/ui/actions/actors_gate.rb +1 -1
- data/lib/flipper/ui/actions/features.rb +2 -2
- data/lib/flipper/ui/actions/file.rb +1 -1
- data/lib/flipper/ui/actions/groups_gate.rb +1 -1
- data/lib/flipper/ui/actions/percentage_of_actors_gate.rb +1 -1
- data/lib/flipper/ui/actions/percentage_of_time_gate.rb +1 -1
- data/lib/flipper/ui/decorators/feature.rb +3 -3
- data/lib/flipper/ui/middleware.rb +2 -1
- data/lib/flipper/ui/public/css/application.css +7 -0
- data/lib/flipper/ui/views/feature.erb +3 -3
- data/lib/flipper/ui/views/features.erb +1 -1
- data/lib/flipper/ui/views/layout.erb +4 -5
- data/lib/flipper/ui.rb +2 -2
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/ui/actions/actors_gate_spec.rb +19 -2
- data/spec/flipper/ui/actions/boolean_gate_spec.rb +18 -0
- data/spec/flipper/ui/actions/feature_spec.rb +18 -0
- data/spec/flipper/ui/actions/features_spec.rb +16 -3
- data/spec/flipper/ui/actions/file_spec.rb +0 -10
- data/spec/flipper/ui/actions/groups_gate_spec.rb +20 -3
- data/spec/flipper/ui/actions/percentage_of_actors_gate_spec.rb +18 -1
- data/spec/flipper/ui/actions/percentage_of_time_gate_spec.rb +18 -1
- data/spec/flipper/ui_spec.rb +0 -13
- metadata +6 -14
- data/lib/flipper/ui/public/octicons/LICENSE.txt +0 -9
- data/lib/flipper/ui/public/octicons/README.md +0 -1
- data/lib/flipper/ui/public/octicons/octicons-local.ttf +0 -0
- data/lib/flipper/ui/public/octicons/octicons.css +0 -236
- data/lib/flipper/ui/public/octicons/octicons.eot +0 -0
- data/lib/flipper/ui/public/octicons/octicons.svg +0 -200
- data/lib/flipper/ui/public/octicons/octicons.ttf +0 -0
- data/lib/flipper/ui/public/octicons/octicons.woff +0 -0
@@ -31,6 +31,24 @@ RSpec.describe Flipper::UI::Actions::BooleanGate do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
context "with space in feature name" do
|
35
|
+
before do
|
36
|
+
flipper.disable :search
|
37
|
+
post 'features/sp%20ace/boolean',
|
38
|
+
{ 'action' => 'Enable', 'authenticity_token' => token },
|
39
|
+
'rack.session' => session
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'updates feature' do
|
43
|
+
expect(flipper.enabled?("sp ace")).to be(true)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'redirects back to feature' do
|
47
|
+
expect(last_response.status).to be(302)
|
48
|
+
expect(last_response.headers['Location']).to eq('/features/sp%20ace')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
34
52
|
context 'with disable' do
|
35
53
|
before do
|
36
54
|
flipper.enable :search
|
@@ -29,6 +29,24 @@ RSpec.describe Flipper::UI::Actions::Feature do
|
|
29
29
|
expect(last_response.headers['Location']).to eq('/features')
|
30
30
|
end
|
31
31
|
|
32
|
+
context "with space in feature name" do
|
33
|
+
before do
|
34
|
+
flipper.enable "sp ace"
|
35
|
+
delete '/features/sp%20ace',
|
36
|
+
{ 'authenticity_token' => token },
|
37
|
+
'rack.session' => session
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'removes feature' do
|
41
|
+
expect(flipper.features.map(&:key)).not_to include('sp ace')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'redirects to features' do
|
45
|
+
expect(last_response.status).to be(302)
|
46
|
+
expect(last_response.headers['Location']).to eq('/features')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
32
50
|
context 'when feature_removal_enabled is set to false' do
|
33
51
|
around do |example|
|
34
52
|
begin
|
@@ -95,7 +95,7 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
95
95
|
expect(last_response.headers['Location']).to eq('/features/notifications_next')
|
96
96
|
end
|
97
97
|
|
98
|
-
context 'feature name
|
98
|
+
context 'feature name has whitespace at beginning and end' do
|
99
99
|
let(:feature_name) { ' notifications_next ' }
|
100
100
|
|
101
101
|
it 'adds feature without whitespace' do
|
@@ -103,6 +103,19 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
+
context 'feature name contains space' do
|
107
|
+
let(:feature_name) { 'notifications next' }
|
108
|
+
|
109
|
+
it 'adds feature with space' do
|
110
|
+
expect(flipper.features.map(&:key)).to include('notifications next')
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'redirects to feature' do
|
114
|
+
expect(last_response.status).to be(302)
|
115
|
+
expect(last_response.headers['Location']).to eq('/features/notifications%20next')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
106
119
|
context 'for an invalid feature name' do
|
107
120
|
context 'empty feature name' do
|
108
121
|
let(:feature_name) { '' }
|
@@ -113,7 +126,7 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
113
126
|
|
114
127
|
it 'redirects back to feature' do
|
115
128
|
expect(last_response.status).to be(302)
|
116
|
-
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22
|
129
|
+
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22%20is%20not%20a%20valid%20feature%20name.')
|
117
130
|
end
|
118
131
|
end
|
119
132
|
|
@@ -126,7 +139,7 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
126
139
|
|
127
140
|
it 'redirects back to feature' do
|
128
141
|
expect(last_response.status).to be(302)
|
129
|
-
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22
|
142
|
+
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22%20is%20not%20a%20valid%20feature%20name.')
|
130
143
|
end
|
131
144
|
end
|
132
145
|
end
|
@@ -20,14 +20,4 @@ RSpec.describe Flipper::UI::Actions::File do
|
|
20
20
|
expect(last_response.status).to be(200)
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
24
|
-
describe 'GET /octicons/octicons.eot' do
|
25
|
-
before do
|
26
|
-
get '/octicons/octicons.eot'
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'responds with 200' do
|
30
|
-
expect(last_response.status).to be(200)
|
31
|
-
end
|
32
|
-
end
|
33
23
|
end
|
@@ -60,6 +60,23 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
|
|
60
60
|
expect(last_response.headers['Location']).to eq('/features/search')
|
61
61
|
end
|
62
62
|
|
63
|
+
context 'feature name contains space' do
|
64
|
+
before do
|
65
|
+
post 'features/sp%20ace/groups',
|
66
|
+
{ 'value' => group_name, 'operation' => 'enable', 'authenticity_token' => token },
|
67
|
+
'rack.session' => session
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'adds item to members' do
|
71
|
+
expect(flipper["sp ace"].groups_value).to include('admins')
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'redirects back to feature' do
|
75
|
+
expect(last_response.status).to be(302)
|
76
|
+
expect(last_response.headers['Location']).to eq('/features/sp%20ace')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
63
80
|
context 'group name contains whitespace' do
|
64
81
|
let(:group_name) { ' admins ' }
|
65
82
|
|
@@ -74,7 +91,7 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
|
|
74
91
|
|
75
92
|
it 'redirects back to feature' do
|
76
93
|
expect(last_response.status).to be(302)
|
77
|
-
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The
|
94
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22not_here%22%20has%20not%20been%20registered.')
|
78
95
|
end
|
79
96
|
end
|
80
97
|
|
@@ -83,7 +100,7 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
|
|
83
100
|
|
84
101
|
it 'redirects back to feature' do
|
85
102
|
expect(last_response.status).to be(302)
|
86
|
-
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The
|
103
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22%22%20has%20not%20been%20registered.')
|
87
104
|
end
|
88
105
|
end
|
89
106
|
|
@@ -92,7 +109,7 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
|
|
92
109
|
|
93
110
|
it 'redirects back to feature' do
|
94
111
|
expect(last_response.status).to be(302)
|
95
|
-
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The
|
112
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22%22%20has%20not%20been%20registered.')
|
96
113
|
end
|
97
114
|
end
|
98
115
|
end
|
@@ -30,6 +30,23 @@ RSpec.describe Flipper::UI::Actions::PercentageOfActorsGate do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
context 'with space in feature name' do
|
34
|
+
before do
|
35
|
+
post 'features/sp%20ace/percentage_of_actors',
|
36
|
+
{ 'value' => '24', 'authenticity_token' => token },
|
37
|
+
'rack.session' => session
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'enables the feature' do
|
41
|
+
expect(flipper["sp ace"].percentage_of_actors_value).to be(24)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'redirects back to feature' do
|
45
|
+
expect(last_response.status).to be(302)
|
46
|
+
expect(last_response.headers['Location']).to eq('/features/sp%20ace')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
33
50
|
context 'with invalid value' do
|
34
51
|
before do
|
35
52
|
post 'features/search/percentage_of_actors',
|
@@ -43,7 +60,7 @@ RSpec.describe Flipper::UI::Actions::PercentageOfActorsGate do
|
|
43
60
|
|
44
61
|
it 'redirects back to feature' do
|
45
62
|
expect(last_response.status).to be(302)
|
46
|
-
expect(last_response.headers['Location']).to eq('/features/search?error=Invalid
|
63
|
+
expect(last_response.headers['Location']).to eq('/features/search?error=Invalid%20percentage%20of%20actors%20value:%20value%20must%20be%20a%20positive%20number%20less%20than%20or%20equal%20to%20100,%20but%20was%20555')
|
47
64
|
end
|
48
65
|
end
|
49
66
|
end
|
@@ -30,6 +30,23 @@ RSpec.describe Flipper::UI::Actions::PercentageOfTimeGate do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
context 'with space in feature name' do
|
34
|
+
before do
|
35
|
+
post 'features/sp%20ace/percentage_of_time',
|
36
|
+
{ 'value' => '24', 'authenticity_token' => token },
|
37
|
+
'rack.session' => session
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'enables the feature' do
|
41
|
+
expect(flipper["sp ace"].percentage_of_time_value).to be(24)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'redirects back to feature' do
|
45
|
+
expect(last_response.status).to be(302)
|
46
|
+
expect(last_response.headers['Location']).to eq('/features/sp%20ace')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
33
50
|
context 'with invalid value' do
|
34
51
|
before do
|
35
52
|
post 'features/search/percentage_of_time',
|
@@ -43,7 +60,7 @@ RSpec.describe Flipper::UI::Actions::PercentageOfTimeGate do
|
|
43
60
|
|
44
61
|
it 'redirects back to feature' do
|
45
62
|
expect(last_response.status).to be(302)
|
46
|
-
expect(last_response.headers['Location']).to eq('/features/search?error=Invalid
|
63
|
+
expect(last_response.headers['Location']).to eq('/features/search?error=Invalid%20percentage%20of%20time%20value:%20value%20must%20be%20a%20positive%20number%20less%20than%20or%20equal%20to%20100,%20but%20was%20555')
|
47
64
|
end
|
48
65
|
end
|
49
66
|
end
|
data/spec/flipper/ui_spec.rb
CHANGED
@@ -24,19 +24,6 @@ RSpec.describe Flipper::UI do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
describe 'Initializing middleware lazily with a block' do
|
28
|
-
let(:app) do
|
29
|
-
build_app(-> { flipper })
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'works' do
|
33
|
-
flipper.enable :some_great_feature
|
34
|
-
get '/features'
|
35
|
-
expect(last_response.status).to be(200)
|
36
|
-
expect(last_response.body).to include('some_great_feature')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
27
|
describe 'Request method unsupported by action' do
|
41
28
|
it 'raises error' do
|
42
29
|
expect do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flipper-ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
59
|
+
version: 0.22.1
|
60
60
|
type: :runtime
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
66
|
+
version: 0.22.1
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: erubi
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,14 +123,6 @@ files:
|
|
123
123
|
- lib/flipper/ui/public/css/application.css
|
124
124
|
- lib/flipper/ui/public/images/logo.png
|
125
125
|
- lib/flipper/ui/public/js/application.js
|
126
|
-
- lib/flipper/ui/public/octicons/LICENSE.txt
|
127
|
-
- lib/flipper/ui/public/octicons/README.md
|
128
|
-
- lib/flipper/ui/public/octicons/octicons-local.ttf
|
129
|
-
- lib/flipper/ui/public/octicons/octicons.css
|
130
|
-
- lib/flipper/ui/public/octicons/octicons.eot
|
131
|
-
- lib/flipper/ui/public/octicons/octicons.svg
|
132
|
-
- lib/flipper/ui/public/octicons/octicons.ttf
|
133
|
-
- lib/flipper/ui/public/octicons/octicons.woff
|
134
126
|
- lib/flipper/ui/util.rb
|
135
127
|
- lib/flipper/ui/views/add_actor.erb
|
136
128
|
- lib/flipper/ui/views/add_feature.erb
|
@@ -173,9 +165,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
165
|
version: '0'
|
174
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
167
|
requirements:
|
176
|
-
- - "
|
168
|
+
- - ">="
|
177
169
|
- !ruby/object:Gem::Version
|
178
|
-
version:
|
170
|
+
version: '0'
|
179
171
|
requirements: []
|
180
172
|
rubygems_version: 3.0.3
|
181
173
|
signing_key:
|
@@ -1,9 +0,0 @@
|
|
1
|
-
(c) 2012-2015 GitHub
|
2
|
-
|
3
|
-
When using the GitHub logos, be sure to follow the GitHub logo guidelines (https://github.com/logos)
|
4
|
-
|
5
|
-
Font License: SIL OFL 1.1 (http://scripts.sil.org/OFL)
|
6
|
-
Applies to all font files
|
7
|
-
|
8
|
-
Code License: MIT (http://choosealicense.com/licenses/mit/)
|
9
|
-
Applies to all other files
|
@@ -1 +0,0 @@
|
|
1
|
-
If you intend to install Octicons locally, install `octicons-local.ttf`. It should appear as “github-octicons” in your font list. It is specially designed not to conflict with GitHub's web fonts.
|
Binary file
|
@@ -1,236 +0,0 @@
|
|
1
|
-
@font-face {
|
2
|
-
font-family: 'octicons';
|
3
|
-
src: url('octicons.eot?#iefix') format('embedded-opentype'),
|
4
|
-
url('octicons.woff') format('woff'),
|
5
|
-
url('octicons.ttf') format('truetype'),
|
6
|
-
url('octicons.svg#octicons') format('svg');
|
7
|
-
font-weight: normal;
|
8
|
-
font-style: normal;
|
9
|
-
}
|
10
|
-
|
11
|
-
/*
|
12
|
-
|
13
|
-
.octicon is optimized for 16px.
|
14
|
-
.mega-octicon is optimized for 32px but can be used larger.
|
15
|
-
|
16
|
-
*/
|
17
|
-
.octicon, .mega-octicon {
|
18
|
-
font: normal normal normal 16px/1 octicons;
|
19
|
-
display: inline-block;
|
20
|
-
text-decoration: none;
|
21
|
-
text-rendering: auto;
|
22
|
-
-webkit-font-smoothing: antialiased;
|
23
|
-
-moz-osx-font-smoothing: grayscale;
|
24
|
-
-webkit-user-select: none;
|
25
|
-
-moz-user-select: none;
|
26
|
-
-ms-user-select: none;
|
27
|
-
user-select: none;
|
28
|
-
}
|
29
|
-
.mega-octicon { font-size: 32px; }
|
30
|
-
|
31
|
-
.octicon-alert:before { content: '\f02d'} /* */
|
32
|
-
.octicon-alignment-align:before { content: '\f08a'} /* */
|
33
|
-
.octicon-alignment-aligned-to:before { content: '\f08e'} /* */
|
34
|
-
.octicon-alignment-unalign:before { content: '\f08b'} /* */
|
35
|
-
.octicon-arrow-down:before { content: '\f03f'} /* */
|
36
|
-
.octicon-arrow-left:before { content: '\f040'} /* */
|
37
|
-
.octicon-arrow-right:before { content: '\f03e'} /* */
|
38
|
-
.octicon-arrow-small-down:before { content: '\f0a0'} /* */
|
39
|
-
.octicon-arrow-small-left:before { content: '\f0a1'} /* */
|
40
|
-
.octicon-arrow-small-right:before { content: '\f071'} /* */
|
41
|
-
.octicon-arrow-small-up:before { content: '\f09f'} /* */
|
42
|
-
.octicon-arrow-up:before { content: '\f03d'} /* */
|
43
|
-
.octicon-beer:before { content: '\f069'} /* */
|
44
|
-
.octicon-book:before { content: '\f007'} /* */
|
45
|
-
.octicon-bookmark:before { content: '\f07b'} /* */
|
46
|
-
.octicon-briefcase:before { content: '\f0d3'} /* */
|
47
|
-
.octicon-broadcast:before { content: '\f048'} /* */
|
48
|
-
.octicon-browser:before { content: '\f0c5'} /* */
|
49
|
-
.octicon-bug:before { content: '\f091'} /* */
|
50
|
-
.octicon-calendar:before { content: '\f068'} /* */
|
51
|
-
.octicon-check:before { content: '\f03a'} /* */
|
52
|
-
.octicon-checklist:before { content: '\f076'} /* */
|
53
|
-
.octicon-chevron-down:before { content: '\f0a3'} /* */
|
54
|
-
.octicon-chevron-left:before { content: '\f0a4'} /* */
|
55
|
-
.octicon-chevron-right:before { content: '\f078'} /* */
|
56
|
-
.octicon-chevron-up:before { content: '\f0a2'} /* */
|
57
|
-
.octicon-circle-slash:before { content: '\f084'} /* */
|
58
|
-
.octicon-circuit-board:before { content: '\f0d6'} /* */
|
59
|
-
.octicon-clippy:before { content: '\f035'} /* */
|
60
|
-
.octicon-clock:before { content: '\f046'} /* */
|
61
|
-
.octicon-cloud-download:before { content: '\f00b'} /* */
|
62
|
-
.octicon-cloud-upload:before { content: '\f00c'} /* */
|
63
|
-
.octicon-code:before { content: '\f05f'} /* */
|
64
|
-
.octicon-color-mode:before { content: '\f065'} /* */
|
65
|
-
.octicon-comment-add:before,
|
66
|
-
.octicon-comment:before { content: '\f02b'} /* */
|
67
|
-
.octicon-comment-discussion:before { content: '\f04f'} /* */
|
68
|
-
.octicon-credit-card:before { content: '\f045'} /* */
|
69
|
-
.octicon-dash:before { content: '\f0ca'} /* */
|
70
|
-
.octicon-dashboard:before { content: '\f07d'} /* */
|
71
|
-
.octicon-database:before { content: '\f096'} /* */
|
72
|
-
.octicon-device-camera:before { content: '\f056'} /* */
|
73
|
-
.octicon-device-camera-video:before { content: '\f057'} /* */
|
74
|
-
.octicon-device-desktop:before { content: '\f27c'} /* */
|
75
|
-
.octicon-device-mobile:before { content: '\f038'} /* */
|
76
|
-
.octicon-diff:before { content: '\f04d'} /* */
|
77
|
-
.octicon-diff-added:before { content: '\f06b'} /* */
|
78
|
-
.octicon-diff-ignored:before { content: '\f099'} /* */
|
79
|
-
.octicon-diff-modified:before { content: '\f06d'} /* */
|
80
|
-
.octicon-diff-removed:before { content: '\f06c'} /* */
|
81
|
-
.octicon-diff-renamed:before { content: '\f06e'} /* */
|
82
|
-
.octicon-ellipsis:before { content: '\f09a'} /* */
|
83
|
-
.octicon-eye-unwatch:before,
|
84
|
-
.octicon-eye-watch:before,
|
85
|
-
.octicon-eye:before { content: '\f04e'} /* */
|
86
|
-
.octicon-file-binary:before { content: '\f094'} /* */
|
87
|
-
.octicon-file-code:before { content: '\f010'} /* */
|
88
|
-
.octicon-file-directory:before { content: '\f016'} /* */
|
89
|
-
.octicon-file-media:before { content: '\f012'} /* */
|
90
|
-
.octicon-file-pdf:before { content: '\f014'} /* */
|
91
|
-
.octicon-file-submodule:before { content: '\f017'} /* */
|
92
|
-
.octicon-file-symlink-directory:before { content: '\f0b1'} /* */
|
93
|
-
.octicon-file-symlink-file:before { content: '\f0b0'} /* */
|
94
|
-
.octicon-file-text:before { content: '\f011'} /* */
|
95
|
-
.octicon-file-zip:before { content: '\f013'} /* */
|
96
|
-
.octicon-flame:before { content: '\f0d2'} /* */
|
97
|
-
.octicon-fold:before { content: '\f0cc'} /* */
|
98
|
-
.octicon-gear:before { content: '\f02f'} /* */
|
99
|
-
.octicon-gift:before { content: '\f042'} /* */
|
100
|
-
.octicon-gist:before { content: '\f00e'} /* */
|
101
|
-
.octicon-gist-secret:before { content: '\f08c'} /* */
|
102
|
-
.octicon-git-branch-create:before,
|
103
|
-
.octicon-git-branch-delete:before,
|
104
|
-
.octicon-git-branch:before { content: '\f020'} /* */
|
105
|
-
.octicon-git-commit:before { content: '\f01f'} /* */
|
106
|
-
.octicon-git-compare:before { content: '\f0ac'} /* */
|
107
|
-
.octicon-git-merge:before { content: '\f023'} /* */
|
108
|
-
.octicon-git-pull-request-abandoned:before,
|
109
|
-
.octicon-git-pull-request:before { content: '\f009'} /* */
|
110
|
-
.octicon-globe:before { content: '\f0b6'} /* */
|
111
|
-
.octicon-graph:before { content: '\f043'} /* */
|
112
|
-
.octicon-heart:before { content: '\2665'} /* ♥ */
|
113
|
-
.octicon-history:before { content: '\f07e'} /* */
|
114
|
-
.octicon-home:before { content: '\f08d'} /* */
|
115
|
-
.octicon-horizontal-rule:before { content: '\f070'} /* */
|
116
|
-
.octicon-hourglass:before { content: '\f09e'} /* */
|
117
|
-
.octicon-hubot:before { content: '\f09d'} /* */
|
118
|
-
.octicon-inbox:before { content: '\f0cf'} /* */
|
119
|
-
.octicon-info:before { content: '\f059'} /* */
|
120
|
-
.octicon-issue-closed:before { content: '\f028'} /* */
|
121
|
-
.octicon-issue-opened:before { content: '\f026'} /* */
|
122
|
-
.octicon-issue-reopened:before { content: '\f027'} /* */
|
123
|
-
.octicon-jersey:before { content: '\f019'} /* */
|
124
|
-
.octicon-jump-down:before { content: '\f072'} /* */
|
125
|
-
.octicon-jump-left:before { content: '\f0a5'} /* */
|
126
|
-
.octicon-jump-right:before { content: '\f0a6'} /* */
|
127
|
-
.octicon-jump-up:before { content: '\f073'} /* */
|
128
|
-
.octicon-key:before { content: '\f049'} /* */
|
129
|
-
.octicon-keyboard:before { content: '\f00d'} /* */
|
130
|
-
.octicon-law:before { content: '\f0d8'} /* */
|
131
|
-
.octicon-light-bulb:before { content: '\f000'} /* */
|
132
|
-
.octicon-link:before { content: '\f05c'} /* */
|
133
|
-
.octicon-link-external:before { content: '\f07f'} /* */
|
134
|
-
.octicon-list-ordered:before { content: '\f062'} /* */
|
135
|
-
.octicon-list-unordered:before { content: '\f061'} /* */
|
136
|
-
.octicon-location:before { content: '\f060'} /* */
|
137
|
-
.octicon-gist-private:before,
|
138
|
-
.octicon-mirror-private:before,
|
139
|
-
.octicon-git-fork-private:before,
|
140
|
-
.octicon-lock:before { content: '\f06a'} /* */
|
141
|
-
.octicon-logo-github:before { content: '\f092'} /* */
|
142
|
-
.octicon-mail:before { content: '\f03b'} /* */
|
143
|
-
.octicon-mail-read:before { content: '\f03c'} /* */
|
144
|
-
.octicon-mail-reply:before { content: '\f051'} /* */
|
145
|
-
.octicon-mark-github:before { content: '\f00a'} /* */
|
146
|
-
.octicon-markdown:before { content: '\f0c9'} /* */
|
147
|
-
.octicon-megaphone:before { content: '\f077'} /* */
|
148
|
-
.octicon-mention:before { content: '\f0be'} /* */
|
149
|
-
.octicon-microscope:before { content: '\f089'} /* */
|
150
|
-
.octicon-milestone:before { content: '\f075'} /* */
|
151
|
-
.octicon-mirror-public:before,
|
152
|
-
.octicon-mirror:before { content: '\f024'} /* */
|
153
|
-
.octicon-mortar-board:before { content: '\f0d7'} /* */
|
154
|
-
.octicon-move-down:before { content: '\f0a8'} /* */
|
155
|
-
.octicon-move-left:before { content: '\f074'} /* */
|
156
|
-
.octicon-move-right:before { content: '\f0a9'} /* */
|
157
|
-
.octicon-move-up:before { content: '\f0a7'} /* */
|
158
|
-
.octicon-mute:before { content: '\f080'} /* */
|
159
|
-
.octicon-no-newline:before { content: '\f09c'} /* */
|
160
|
-
.octicon-octoface:before { content: '\f008'} /* */
|
161
|
-
.octicon-organization:before { content: '\f037'} /* */
|
162
|
-
.octicon-package:before { content: '\f0c4'} /* */
|
163
|
-
.octicon-paintcan:before { content: '\f0d1'} /* */
|
164
|
-
.octicon-pencil:before { content: '\f058'} /* */
|
165
|
-
.octicon-person-add:before,
|
166
|
-
.octicon-person-follow:before,
|
167
|
-
.octicon-person:before { content: '\f018'} /* */
|
168
|
-
.octicon-pin:before { content: '\f041'} /* */
|
169
|
-
.octicon-playback-fast-forward:before { content: '\f0bd'} /* */
|
170
|
-
.octicon-playback-pause:before { content: '\f0bb'} /* */
|
171
|
-
.octicon-playback-play:before { content: '\f0bf'} /* */
|
172
|
-
.octicon-playback-rewind:before { content: '\f0bc'} /* */
|
173
|
-
.octicon-plug:before { content: '\f0d4'} /* */
|
174
|
-
.octicon-repo-create:before,
|
175
|
-
.octicon-gist-new:before,
|
176
|
-
.octicon-file-directory-create:before,
|
177
|
-
.octicon-file-add:before,
|
178
|
-
.octicon-plus:before { content: '\f05d'} /* */
|
179
|
-
.octicon-podium:before { content: '\f0af'} /* */
|
180
|
-
.octicon-primitive-dot:before { content: '\f052'} /* */
|
181
|
-
.octicon-primitive-square:before { content: '\f053'} /* */
|
182
|
-
.octicon-pulse:before { content: '\f085'} /* */
|
183
|
-
.octicon-puzzle:before { content: '\f0c0'} /* */
|
184
|
-
.octicon-question:before { content: '\f02c'} /* */
|
185
|
-
.octicon-quote:before { content: '\f063'} /* */
|
186
|
-
.octicon-radio-tower:before { content: '\f030'} /* */
|
187
|
-
.octicon-repo-delete:before,
|
188
|
-
.octicon-repo:before { content: '\f001'} /* */
|
189
|
-
.octicon-repo-clone:before { content: '\f04c'} /* */
|
190
|
-
.octicon-repo-force-push:before { content: '\f04a'} /* */
|
191
|
-
.octicon-gist-fork:before,
|
192
|
-
.octicon-repo-forked:before { content: '\f002'} /* */
|
193
|
-
.octicon-repo-pull:before { content: '\f006'} /* */
|
194
|
-
.octicon-repo-push:before { content: '\f005'} /* */
|
195
|
-
.octicon-rocket:before { content: '\f033'} /* */
|
196
|
-
.octicon-rss:before { content: '\f034'} /* */
|
197
|
-
.octicon-ruby:before { content: '\f047'} /* */
|
198
|
-
.octicon-screen-full:before { content: '\f066'} /* */
|
199
|
-
.octicon-screen-normal:before { content: '\f067'} /* */
|
200
|
-
.octicon-search-save:before,
|
201
|
-
.octicon-search:before { content: '\f02e'} /* */
|
202
|
-
.octicon-server:before { content: '\f097'} /* */
|
203
|
-
.octicon-settings:before { content: '\f07c'} /* */
|
204
|
-
.octicon-log-in:before,
|
205
|
-
.octicon-sign-in:before { content: '\f036'} /* */
|
206
|
-
.octicon-log-out:before,
|
207
|
-
.octicon-sign-out:before { content: '\f032'} /* */
|
208
|
-
.octicon-split:before { content: '\f0c6'} /* */
|
209
|
-
.octicon-squirrel:before { content: '\f0b2'} /* */
|
210
|
-
.octicon-star-add:before,
|
211
|
-
.octicon-star-delete:before,
|
212
|
-
.octicon-star:before { content: '\f02a'} /* */
|
213
|
-
.octicon-steps:before { content: '\f0c7'} /* */
|
214
|
-
.octicon-stop:before { content: '\f08f'} /* */
|
215
|
-
.octicon-repo-sync:before,
|
216
|
-
.octicon-sync:before { content: '\f087'} /* */
|
217
|
-
.octicon-tag-remove:before,
|
218
|
-
.octicon-tag-add:before,
|
219
|
-
.octicon-tag:before { content: '\f015'} /* */
|
220
|
-
.octicon-telescope:before { content: '\f088'} /* */
|
221
|
-
.octicon-terminal:before { content: '\f0c8'} /* */
|
222
|
-
.octicon-three-bars:before { content: '\f05e'} /* */
|
223
|
-
.octicon-thumbsdown:before { content: '\f0db'} /* */
|
224
|
-
.octicon-thumbsup:before { content: '\f0da'} /* */
|
225
|
-
.octicon-tools:before { content: '\f031'} /* */
|
226
|
-
.octicon-trashcan:before { content: '\f0d0'} /* */
|
227
|
-
.octicon-triangle-down:before { content: '\f05b'} /* */
|
228
|
-
.octicon-triangle-left:before { content: '\f044'} /* */
|
229
|
-
.octicon-triangle-right:before { content: '\f05a'} /* */
|
230
|
-
.octicon-triangle-up:before { content: '\f0aa'} /* */
|
231
|
-
.octicon-unfold:before { content: '\f039'} /* */
|
232
|
-
.octicon-unmute:before { content: '\f0ba'} /* */
|
233
|
-
.octicon-versions:before { content: '\f064'} /* */
|
234
|
-
.octicon-remove-close:before,
|
235
|
-
.octicon-x:before { content: '\f081'} /* */
|
236
|
-
.octicon-zap:before { content: '\26A1'} /* ⚡ */
|