flipper-ui 0.17.2 → 0.18.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.
- checksums.yaml +4 -4
- data/docs/ui/README.md +15 -5
- data/examples/ui/basic.ru +19 -0
- data/flipper-ui.gemspec +1 -2
- data/lib/flipper/ui.rb +0 -3
- data/lib/flipper/ui/action.rb +2 -1
- data/lib/flipper/ui/actions/feature.rb +5 -2
- data/lib/flipper/ui/actions/features.rb +1 -0
- data/lib/flipper/ui/actions/file.rb +1 -1
- data/lib/flipper/ui/assets/javascripts/application.coffee +5 -3
- data/lib/flipper/ui/configuration.rb +14 -10
- data/lib/flipper/ui/decorators/feature.rb +39 -13
- data/lib/flipper/ui/public/css/application.css +20 -6493
- data/lib/flipper/ui/public/js/application.js +5 -5
- data/lib/flipper/ui/util.rb +40 -0
- data/lib/flipper/ui/views/add_actor.erb +1 -1
- data/lib/flipper/ui/views/add_feature.erb +1 -1
- data/lib/flipper/ui/views/add_group.erb +1 -1
- data/lib/flipper/ui/views/feature.erb +198 -179
- data/lib/flipper/ui/views/features.erb +42 -36
- data/lib/flipper/ui/views/layout.erb +4 -14
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/ui/actions/actors_gate_spec.rb +0 -4
- data/spec/flipper/ui/actions/feature_spec.rb +14 -16
- data/spec/flipper/ui/actions/features_spec.rb +1 -5
- data/spec/flipper/ui/actions/file_spec.rb +0 -10
- data/spec/flipper/ui/actions/groups_gate_spec.rb +0 -6
- data/spec/flipper/ui/actions/percentage_of_actors_gate_spec.rb +0 -2
- data/spec/flipper/ui/actions/percentage_of_time_gate_spec.rb +0 -2
- data/spec/flipper/ui/configuration_spec.rb +21 -34
- data/spec/flipper/ui/decorators/feature_spec.rb +0 -30
- metadata +5 -121
- data/lib/flipper/ui/assets/stylesheets/.DS_Store +0 -0
- data/lib/flipper/ui/assets/stylesheets/application.scss +0 -19
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_alert.scss +0 -51
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_badge.scss +0 -47
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumb.scss +0 -38
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-group.scss +0 -166
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_buttons.scss +0 -143
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_card.scss +0 -270
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_carousel.scss +0 -191
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_close.scss +0 -34
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_code.scss +0 -56
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_custom-forms.scss +0 -297
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdown.scss +0 -131
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_forms.scss +0 -333
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_functions.scss +0 -86
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_grid.scss +0 -52
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_images.scss +0 -42
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-group.scss +0 -159
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_jumbotron.scss +0 -16
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_list-group.scss +0 -115
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_media.scss +0 -8
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_mixins.scss +0 -42
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_modal.scss +0 -168
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_nav.scss +0 -118
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_navbar.scss +0 -311
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_pagination.scss +0 -77
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_popover.scss +0 -183
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_print.scss +0 -124
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress.scss +0 -33
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_reboot.scss +0 -482
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_root.scss +0 -19
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_tables.scss +0 -180
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_tooltip.scss +0 -115
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_transitions.scss +0 -36
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_type.scss +0 -125
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_utilities.scss +0 -14
- data/lib/flipper/ui/assets/stylesheets/bootstrap/_variables.scss +0 -894
- data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-grid.scss +0 -32
- data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-reboot.scss +0 -12
- data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap.scss +0 -42
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alert.scss +0 -13
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -12
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_border-radius.scss +0 -35
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +0 -5
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +0 -123
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_buttons.scss +0 -109
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_caret.scss +0 -65
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_clearfix.scss +0 -7
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_float.scss +0 -11
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_forms.scss +0 -137
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_gradients.scss +0 -45
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -67
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid.scss +0 -52
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -39
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_image.scss +0 -36
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_list-group.scss +0 -21
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_lists.scss +0 -7
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_pagination.scss +0 -22
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-text.scss +0 -17
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_resize.scss +0 -6
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -35
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_size.scss +0 -6
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -30
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -14
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -9
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-truncate.scss +0 -8
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_transition.scss +0 -9
- data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -7
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -59
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_clearfix.scss +0 -3
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_display.scss +0 -38
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -52
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -46
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_float.scss +0 -9
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_position.scss +0 -36
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -12
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -51
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_text.scss +0 -52
- data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -11
- data/lib/flipper/ui/assets/stylesheets/primer/.scss-lint.yml +0 -446
- data/lib/flipper/ui/assets/stylesheets/primer/_alerts.scss +0 -106
- data/lib/flipper/ui/assets/stylesheets/primer/_avatars.scss +0 -36
- data/lib/flipper/ui/assets/stylesheets/primer/_base.scss +0 -40
- data/lib/flipper/ui/assets/stylesheets/primer/_blankslate.scss +0 -96
- data/lib/flipper/ui/assets/stylesheets/primer/_buttons.scss +0 -404
- data/lib/flipper/ui/assets/stylesheets/primer/_counter.scss +0 -10
- data/lib/flipper/ui/assets/stylesheets/primer/_filter-list.scss +0 -68
- data/lib/flipper/ui/assets/stylesheets/primer/_flex-table.scss +0 -20
- data/lib/flipper/ui/assets/stylesheets/primer/_forms.scss +0 -756
- data/lib/flipper/ui/assets/stylesheets/primer/_layout.scss +0 -69
- data/lib/flipper/ui/assets/stylesheets/primer/_menu.scss +0 -113
- data/lib/flipper/ui/assets/stylesheets/primer/_mixins.scss +0 -53
- data/lib/flipper/ui/assets/stylesheets/primer/_normalize.scss +0 -425
- data/lib/flipper/ui/assets/stylesheets/primer/_states.scss +0 -32
- data/lib/flipper/ui/assets/stylesheets/primer/_tabnav.scss +0 -65
- data/lib/flipper/ui/assets/stylesheets/primer/_tooltips.scss +0 -255
- data/lib/flipper/ui/assets/stylesheets/primer/_truncate.scss +0 -27
- data/lib/flipper/ui/assets/stylesheets/primer/_type.scss +0 -92
- data/lib/flipper/ui/assets/stylesheets/primer/_utility.scss +0 -73
- data/lib/flipper/ui/assets/stylesheets/primer/_variables.scss +0 -34
- data/lib/flipper/ui/assets/stylesheets/primer/primer.scss +0 -39
- data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
- data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -288
- data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- data/lib/flipper/ui/public/images/remove.png +0 -0
- data/lib/flipper/ui/public/octicons/octicons.less +0 -235
- data/lib/flipper/ui/public/octicons/sprockets-octicons.scss +0 -232
@@ -1,6 +1,6 @@
|
|
1
|
-
(function() {
|
2
|
-
$(function() {
|
3
|
-
|
1
|
+
$(function() {
|
2
|
+
$(document).on('click', '.js-toggle-trigger', function() {
|
3
|
+
var $container = $(this).closest('.js-toggle-container');
|
4
|
+
return $container.toggleClass('toggle-on');
|
4
5
|
});
|
5
|
-
|
6
|
-
}).call(this);
|
6
|
+
});
|
data/lib/flipper/ui/util.rb
CHANGED
@@ -8,9 +8,49 @@ module Flipper
|
|
8
8
|
str.to_s !~ NON_WHITESPACE_REGEXP
|
9
9
|
end
|
10
10
|
|
11
|
+
def self.present?(str)
|
12
|
+
!blank?(str)
|
13
|
+
end
|
14
|
+
|
11
15
|
def self.titleize(str)
|
12
16
|
str.to_s.split('_').map(&:capitalize).join(' ')
|
13
17
|
end
|
18
|
+
|
19
|
+
def self.truncate(str, length: 30)
|
20
|
+
if str.length > length
|
21
|
+
str[0..length]
|
22
|
+
else
|
23
|
+
str
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.pluralize(count, singular, plural)
|
28
|
+
if count == 1
|
29
|
+
"#{count} #{singular}"
|
30
|
+
else
|
31
|
+
"#{count} #{plural}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.to_sentence(array, options = {})
|
36
|
+
default_connectors = {
|
37
|
+
words_connector: ", ",
|
38
|
+
two_words_connector: " and ",
|
39
|
+
last_word_connector: ", and "
|
40
|
+
}
|
41
|
+
options = default_connectors.merge!(options)
|
42
|
+
|
43
|
+
case array.length
|
44
|
+
when 0
|
45
|
+
""
|
46
|
+
when 1
|
47
|
+
"#{array[0]}"
|
48
|
+
when 2
|
49
|
+
"#{array[0]}#{options[:two_words_connector]}#{array[1]}"
|
50
|
+
else
|
51
|
+
"#{array[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{array[-1]}"
|
52
|
+
end
|
53
|
+
end
|
14
54
|
end
|
15
55
|
end
|
16
56
|
end
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%== csrf_input_tag %>
|
15
15
|
<input type="hidden" name="operation" value="enable">
|
16
16
|
<input type="text" name="value" placeholder="<%= Flipper::UI.configuration.add_actor_placeholder %>" class="form-control mr-2">
|
17
|
-
<input type="submit" value="Add Actor" class="btn btn-
|
17
|
+
<input type="submit" value="Add Actor" class="btn btn-primary">
|
18
18
|
</form>
|
19
19
|
</div>
|
20
20
|
</div>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<form action="<%= script_name %>/features" method="post" class="form-inline mb-2">
|
11
11
|
<%== csrf_input_tag %>
|
12
12
|
<input type="text" name="value" size="30" placeholder="search, new_pricing, etc." autofocus class="form-control mr-2 mb-2 mb-md-0">
|
13
|
-
<input type="submit" value="Add Feature" class="btn btn-
|
13
|
+
<input type="submit" value="Add Feature" class="btn btn-primary">
|
14
14
|
</form>
|
15
15
|
<p class="text-muted">
|
16
16
|
Recommended naming conventions: lower case, <a href="https://en.wikipedia.org/wiki/Snake_case">snake case</a>, underscores over dashes.
|
@@ -4,124 +4,98 @@
|
|
4
4
|
</div>
|
5
5
|
<% end %>
|
6
6
|
|
7
|
-
|
8
|
-
<div class="row">
|
7
|
+
<% if @feature.description %>
|
8
|
+
<div class="row mb-4">
|
9
9
|
<div class="col">
|
10
10
|
<div class="card">
|
11
|
-
<h4 class="card-header">
|
12
|
-
<span class="octicon octicon-squirrel <%= @feature.color_class %>"></span>
|
13
|
-
<%= @feature.key %>
|
14
|
-
</h4>
|
15
11
|
<div class="card-body">
|
16
|
-
|
17
|
-
<% if @feature.boolean_value %>
|
18
|
-
The feature is enabled for <strong>everyone</strong>. Disable this feature with one click.
|
19
|
-
<% else %>
|
20
|
-
Enable or disable this feature for <strong>everyone</strong> with one click.
|
21
|
-
<% end %>
|
22
|
-
</p>
|
23
|
-
|
24
|
-
<form action="<%= script_name %>/features/<%= @feature.key %>/boolean" method="post">
|
25
|
-
<%== csrf_input_tag %>
|
26
|
-
|
27
|
-
<% unless @feature.boolean_value %>
|
28
|
-
<button type="submit" name="action" value="Enable" class="btn btn-danger" data-toggle="tooltip" title="Enable for everyone">Enable</button>
|
29
|
-
<% end %>
|
30
|
-
|
31
|
-
<button type="submit" name="action" value="Disable" class="btn btn-light" data-toggle="tooltip" <% if @feature.off? %>disabled title="Already disabled for everyone"<% else %>title="Disable for everyone by clearing all percentages, groups and actors."<% end %>>Disable</button>
|
32
|
-
</form>
|
12
|
+
<%= @feature.description %>
|
33
13
|
</div>
|
34
14
|
</div>
|
35
15
|
</div>
|
36
16
|
</div>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div class="row mb-4">
|
20
|
+
<div class="col">
|
21
|
+
<div class="card">
|
22
|
+
<%# Gate State Header %>
|
23
|
+
<div class="card-header">
|
24
|
+
<span class="octicon octicon-squirrel <%= @feature.color_class %> mr-2"></span>
|
25
|
+
<%= @feature.gate_state_title %>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<% unless @feature.boolean_value %>
|
29
|
+
<%# Actors Info and Form %>
|
30
|
+
<div class="card-body border-bottom">
|
31
|
+
<div class="row align-items-center js-toggle-container">
|
32
|
+
<div class="col col-mr-auto toggle-block-when-off">
|
33
|
+
<h6 class="m-0">
|
34
|
+
<strong class="<%= "text-muted" if @feature.actors_value.empty? %>">
|
35
|
+
<% if @feature.actors_value.count > 0 %>
|
36
|
+
Enabled for <%= Util.pluralize @feature.actors_value.count, 'actor', 'actors' %>
|
37
|
+
<% else %>
|
38
|
+
No actors enabled
|
49
39
|
<% end %>
|
50
|
-
</
|
51
|
-
</
|
40
|
+
</strong>
|
41
|
+
</h6>
|
52
42
|
</div>
|
53
|
-
|
54
|
-
|
55
|
-
<div class="col">
|
56
|
-
<h5>- or -</h5>
|
43
|
+
<div class="col col-auto toggle-block-when-off">
|
44
|
+
<button class="btn btn-outline-secondary js-toggle-trigger" data-toggle="collapse" data-target="#add-actor">Add an actor</button>
|
57
45
|
</div>
|
58
|
-
|
59
|
-
|
60
|
-
<div class="col">
|
61
|
-
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_actors" method="post" class="form-inline">
|
46
|
+
<div class="col toggle-block-when-on">
|
47
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/actors" method="post" class="form-inline">
|
62
48
|
<%== csrf_input_tag %>
|
63
|
-
<input type="
|
64
|
-
<input type="
|
49
|
+
<input type="hidden" name="operation" value="enable">
|
50
|
+
<input type="text" name="value" placeholder="<%= Flipper::UI.configuration.add_actor_placeholder %>" class="form-control form-control-sm mr-sm-2 mb-2 mb-sm-0">
|
51
|
+
<input type="submit" value="Add Actor" class="btn btn-sm btn-light">
|
65
52
|
</form>
|
66
53
|
</div>
|
67
|
-
|
68
|
-
|
69
|
-
<div class="col">
|
70
|
-
<p class="text-muted"><small><%= Flipper::UI.configuration.percentage_of_actors.description %></small></p>
|
54
|
+
<div class="col col-auto toggle-block-when-on">
|
55
|
+
<button type="button" class="btn btn-outline-secondary js-toggle-trigger">Cancel</button>
|
71
56
|
</div>
|
72
57
|
</div>
|
73
58
|
</div>
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
<
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
<div class="row">
|
93
|
-
<div class="col">
|
94
|
-
<h5>- or -</h5>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
<div class="row">
|
98
|
-
<div class="col">
|
99
|
-
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_time" method="post" class="form-inline">
|
100
|
-
<%== csrf_input_tag %>
|
101
|
-
<input type="text" name="value" <% if @feature.percentage_of_time_value > 0 %>value="<%= @feature.percentage_of_time_value %>"<% end %> placeholder="custom (26, 32, etc.)" class="form-control form-control-sm mr-sm-2 mb-2 mb-md-0">
|
102
|
-
<input type="submit" name="action" value="Enable" class="btn btn-light btn-sm">
|
103
|
-
</form>
|
104
|
-
</div>
|
105
|
-
</div>
|
106
|
-
<div class="row">
|
107
|
-
<div class="col">
|
108
|
-
<p class="text-muted"><small><%= Flipper::UI.configuration.percentage_of_time.description %></small></p>
|
59
|
+
|
60
|
+
<%# Actors list %>
|
61
|
+
<% @feature.actors_value.each do |item| %>
|
62
|
+
<div class="card-body bg-lightest border-bottom py-3">
|
63
|
+
<div class="row align-items-center">
|
64
|
+
<div class="col col-mr-auto pl-md-5">
|
65
|
+
<h6 class="m-0"><%= item %></h6>
|
66
|
+
</div>
|
67
|
+
<div class="col col-auto">
|
68
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/actors" method="post">
|
69
|
+
<%== csrf_input_tag %>
|
70
|
+
<input type="hidden" name="operation" value="disable">
|
71
|
+
<input type="hidden" name="value" value="<%= item %>">
|
72
|
+
<button type="submit" value="Disable" class="btn btn-link btn-sm text-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
73
|
+
<span class="octicon octicon-trashcan"></span>
|
74
|
+
</button>
|
75
|
+
</form>
|
76
|
+
</div>
|
109
77
|
</div>
|
110
78
|
</div>
|
111
|
-
|
112
|
-
</div>
|
113
|
-
</div>
|
114
|
-
</div>
|
79
|
+
<% end %>
|
115
80
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
81
|
+
<%# Groups Info and Form %>
|
82
|
+
<div class="card-body border-bottom">
|
83
|
+
<div class="row align-items-center js-toggle-container">
|
84
|
+
<div class="col col-mr-auto toggle-block-when-off">
|
85
|
+
<h6 class="m-0">
|
86
|
+
<strong class="<%= "text-muted" if @feature.groups_value.empty? %>">
|
87
|
+
<% if @feature.groups_value.count > 0 %>
|
88
|
+
Enabled for <%= Util.pluralize @feature.groups_value.count, 'group', 'groups' %>
|
89
|
+
<% else %>
|
90
|
+
No groups enabled
|
91
|
+
<% end %>
|
92
|
+
</strong>
|
93
|
+
</h6>
|
94
|
+
</div>
|
95
|
+
<div class="col col-auto toggle-block-when-off">
|
96
|
+
<button class="btn btn-outline-secondary js-toggle-trigger" data-toggle="collapse" data-target="#add-actor">Add a group</button>
|
123
97
|
</div>
|
124
|
-
<div>
|
98
|
+
<div class="col collapse toggle-block-when-on">
|
125
99
|
<% if @feature.disabled_groups.empty? %>
|
126
100
|
All groups enabled.
|
127
101
|
<% else %>
|
@@ -134,106 +108,152 @@
|
|
134
108
|
<option value="<%= group.name %>"><%= group.name %></option>
|
135
109
|
<% end %>
|
136
110
|
</select>
|
137
|
-
<input type="submit" value="Add Group" class="btn btn-light btn
|
111
|
+
<input type="submit" value="Add Group" class="btn btn-sm btn-light btn">
|
138
112
|
</form>
|
139
113
|
<% end %>
|
140
114
|
</div>
|
115
|
+
<div class="col col-auto toggle-block-when-on">
|
116
|
+
<button type="button" class="btn btn-outline-secondary js-toggle-trigger">Cancel</button>
|
117
|
+
</div>
|
141
118
|
</div>
|
142
119
|
</div>
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
<
|
149
|
-
|
150
|
-
|
120
|
+
|
121
|
+
<%# Groups list %>
|
122
|
+
<% @feature.groups_value.each do |item| %>
|
123
|
+
<div class="card-body bg-lightest border-bottom py-3">
|
124
|
+
<div class="row align-items-center">
|
125
|
+
<div class="col col-mr-auto pl-md-5">
|
126
|
+
<h6 class="m-0"><%= item %></h6>
|
127
|
+
</div>
|
128
|
+
<div class="col col-auto">
|
129
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/groups" method="post">
|
130
|
+
<%== csrf_input_tag %>
|
131
|
+
<input type="hidden" name="operation" value="disable">
|
132
|
+
<input type="hidden" name="value" value="<%= item %>">
|
133
|
+
<button type="submit" value="Disable" class="btn btn-link btn-sm text-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
134
|
+
<span class="octicon octicon-trashcan"></span>
|
135
|
+
</button>
|
136
|
+
</form>
|
137
|
+
</div>
|
151
138
|
</div>
|
152
139
|
</div>
|
153
|
-
<% else %>
|
154
|
-
<ul class="list-group list-group-flush">
|
155
|
-
<% @feature.groups_value.each do |item| %>
|
156
|
-
<li class="list-group-item">
|
157
|
-
<div class="d-flex w-100 justify-content-between align-items-center">
|
158
|
-
<div>
|
159
|
-
<%= item %>
|
160
|
-
</div>
|
161
|
-
<div>
|
162
|
-
<form action="<%= script_name %>/features/<%= @feature.key %>/groups" method="post">
|
163
|
-
<%== csrf_input_tag %>
|
164
|
-
<input type="hidden" name="operation" value="disable">
|
165
|
-
<input type="hidden" name="value" value="<%= item %>">
|
166
|
-
<button type="submit" value="Disable" class="btn btn-link btn-sm text-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
167
|
-
<span class="octicon octicon-trashcan"></span>
|
168
|
-
</button>
|
169
|
-
</form>
|
170
|
-
</div>
|
171
|
-
</div>
|
172
|
-
</li>
|
173
|
-
<% end %>
|
174
|
-
</ul>
|
175
140
|
<% end %>
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
141
|
+
|
142
|
+
<%# % of Actors %>
|
143
|
+
<div class="js-toggle-container">
|
144
|
+
<div class="card-body border-bottom">
|
145
|
+
<div class="row align-items-center">
|
146
|
+
<div class="col col-mr-auto">
|
147
|
+
<h6 class="m-0"><strong class="<%= "text-muted" unless @feature.percentage_of_actors_value > 0 %>">Enabled for <%= @feature.percentage_of_actors_value %>% of actors</strong></h6>
|
148
|
+
</div>
|
149
|
+
<div class="col col-auto toggle-block-when-off">
|
150
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Edit</button>
|
151
|
+
</div>
|
152
|
+
<div class="col col-auto toggle-block-when-on">
|
153
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Hide</button>
|
154
|
+
</div>
|
184
155
|
</div>
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
<
|
191
|
-
|
156
|
+
</div>
|
157
|
+
|
158
|
+
<div class="card-body border-bottom toggle-block-when-on bg-lightest">
|
159
|
+
<div class="row">
|
160
|
+
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
161
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_actors" method="post">
|
162
|
+
<%== csrf_input_tag %>
|
163
|
+
<div class="btn-group">
|
164
|
+
<% @percentages.each do |number| %>
|
165
|
+
<input type="submit" name="value" value="<%= number %>%" class="btn btn-light btn-sm" <% if number == @feature.percentage_of_actors_value %>disabled<% end %>>
|
166
|
+
<% end %>
|
167
|
+
</div>
|
168
|
+
</form>
|
169
|
+
</div>
|
170
|
+
<div class="col-12 col-md-6">
|
171
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_actors" method="post" class="form-inline">
|
172
|
+
<%== csrf_input_tag %>
|
173
|
+
<input type="text" name="value" <% if @feature.percentage_of_actors_value > 0 %>value="<%= @feature.percentage_of_actors_value %>"<% end %> placeholder="custom (26, 32, etc.)" class="form-control form-control-sm mr-sm-2 mb-2 mb-md-0">
|
174
|
+
<input type="submit" name="action" value="Save" class="btn btn-light btn-sm">
|
175
|
+
</form>
|
176
|
+
</div>
|
192
177
|
</div>
|
193
178
|
</div>
|
194
179
|
</div>
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
<
|
201
|
-
|
202
|
-
|
180
|
+
|
181
|
+
<%# % of Time %>
|
182
|
+
<div class="js-toggle-container">
|
183
|
+
<div class="card-body border-bottom">
|
184
|
+
<div class="row align-items-center">
|
185
|
+
<div class="col col-mr-auto">
|
186
|
+
<h6 class="m-0"><strong class="<%= "text-muted" unless @feature.percentage_of_time_value > 0 %>">Enabled for <%= @feature.percentage_of_time_value %>% of time</strong></h6>
|
187
|
+
</div>
|
188
|
+
<div class="col col-auto toggle-block-when-off">
|
189
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Edit</button>
|
190
|
+
</div>
|
191
|
+
<div class="col col-auto toggle-block-when-on">
|
192
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Hide</button>
|
193
|
+
</div>
|
203
194
|
</div>
|
204
195
|
</div>
|
205
|
-
|
206
|
-
<
|
207
|
-
|
208
|
-
<
|
209
|
-
<
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
<%== csrf_input_tag %>
|
216
|
-
<input type="hidden" name="operation" value="disable">
|
217
|
-
<input type="hidden" name="value" value="<%= item %>">
|
218
|
-
<button type="submit" value="Disable" class="btn btn-link btn-sm text-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
219
|
-
<span class="octicon octicon-trashcan"></span>
|
220
|
-
</button>
|
221
|
-
</form>
|
196
|
+
|
197
|
+
<div class="card-body border-bottom toggle-block-when-on bg-lightest">
|
198
|
+
<div class="row">
|
199
|
+
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
200
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_time" method="post">
|
201
|
+
<%== csrf_input_tag %>
|
202
|
+
<div class="btn-group">
|
203
|
+
<% @percentages.each do |number| %>
|
204
|
+
<input type="submit" name="value" value="<%= number %>%" class="btn btn-light btn-sm" <% if number == @feature.percentage_of_time_value %>disabled<% end %>>
|
205
|
+
<% end %>
|
222
206
|
</div>
|
223
|
-
</
|
224
|
-
</
|
207
|
+
</form>
|
208
|
+
</div>
|
209
|
+
<div class="col-12 col-md-6">
|
210
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_time" method="post" class="form-inline">
|
211
|
+
<%== csrf_input_tag %>
|
212
|
+
<input type="text" name="value" <% if @feature.percentage_of_time_value > 0 %>value="<%= @feature.percentage_of_time_value %>"<% end %> placeholder="custom (26, 32, etc.)" class="form-control form-control-sm mr-sm-2 mb-2 mb-md-0">
|
213
|
+
<input type="submit" name="action" value="Save" class="btn btn-light btn-sm">
|
214
|
+
</form>
|
215
|
+
</div>
|
216
|
+
</div>
|
217
|
+
</div>
|
218
|
+
</div>
|
219
|
+
<% end %>
|
220
|
+
|
221
|
+
<div class="card-body">
|
222
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/boolean" method="post">
|
223
|
+
<%== csrf_input_tag %>
|
224
|
+
|
225
|
+
<div class="row">
|
226
|
+
<% unless @feature.boolean_value %>
|
227
|
+
<div class="col">
|
228
|
+
<button type="submit" name="action" value="Enable" class="btn btn-outline-success btn-block">
|
229
|
+
<span class="d-block" data-toggle="tooltip" title="Enable for everyone">
|
230
|
+
Fully Enable
|
231
|
+
</span>
|
232
|
+
</button>
|
233
|
+
</div>
|
225
234
|
<% end %>
|
226
|
-
|
227
|
-
|
235
|
+
|
236
|
+
<% unless @feature.off? %>
|
237
|
+
<div class="col">
|
238
|
+
<button type="submit" name="action" value="Disable" class="btn btn-outline-danger btn-block">
|
239
|
+
<span class="d-block" data-toggle="tooltip" title="Disable for everyone by clearing all percentages, groups and actors.">
|
240
|
+
Disable
|
241
|
+
</span>
|
242
|
+
</button>
|
243
|
+
</div>
|
244
|
+
<% end %>
|
245
|
+
</div>
|
246
|
+
</form>
|
228
247
|
</div>
|
229
248
|
</div>
|
230
249
|
</div>
|
250
|
+
</div>
|
231
251
|
|
232
|
-
|
252
|
+
<% if Flipper::UI.configuration.feature_removal_enabled %>
|
233
253
|
<div class="row">
|
234
254
|
<div class="col">
|
235
|
-
<div class="card border
|
236
|
-
<h4 class="card-header
|
255
|
+
<div class="card border">
|
256
|
+
<h4 class="card-header"><%= Flipper::UI.configuration.delete.title %></h4>
|
237
257
|
<div class="card-body">
|
238
258
|
<p>
|
239
259
|
<%= Flipper::UI.configuration.delete.description %>
|
@@ -242,11 +262,10 @@
|
|
242
262
|
<form action="<%= script_name %>/features/<%= @feature.key %>" method="post" onsubmit="return confirm('Are you sure you want to remove this feature from the list of features and disable it for everyone?')">
|
243
263
|
<%== csrf_input_tag %>
|
244
264
|
<input type="hidden" name="_method" value="DELETE">
|
245
|
-
<button type="submit" name="action" value="Delete" class="btn btn-danger" data-toggle="tooltip" title="Remove feature from list of features and disable it." data-placement="right">Delete</button>
|
265
|
+
<button type="submit" name="action" value="Delete" class="btn btn-outline-danger" data-toggle="tooltip" title="Remove feature from list of features and disable it." data-placement="right">Delete</button>
|
246
266
|
</form>
|
247
267
|
</div>
|
248
268
|
</div>
|
249
269
|
</div>
|
250
270
|
</div>
|
251
|
-
|
252
|
-
</div>
|
271
|
+
<% end %>
|