flipper-ui 0.2.0.beta2 → 0.2.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -11
  3. data/README.md +5 -7
  4. data/examples/basic.ru +27 -26
  5. data/flipper-ui.gemspec +5 -3
  6. data/lib/flipper-ui.rb +1 -0
  7. data/lib/flipper/ui.rb +11 -2
  8. data/lib/flipper/ui/action.rb +45 -4
  9. data/lib/flipper/ui/actions/actors_gate.rb +48 -0
  10. data/lib/flipper/ui/actions/add_feature.rb +20 -0
  11. data/lib/flipper/ui/actions/boolean_gate.rb +26 -0
  12. data/lib/flipper/ui/actions/feature.rb +32 -0
  13. data/lib/flipper/ui/actions/features.rb +23 -3
  14. data/lib/flipper/ui/actions/file.rb +1 -1
  15. data/lib/flipper/ui/actions/gate.rb +11 -117
  16. data/lib/flipper/ui/actions/groups_gate.rb +43 -0
  17. data/lib/flipper/ui/actions/{index.rb → home.rb} +3 -3
  18. data/lib/flipper/ui/actions/percentage_of_actors_gate.rb +27 -0
  19. data/lib/flipper/ui/actions/percentage_of_time_gate.rb +27 -0
  20. data/lib/flipper/ui/actor.rb +13 -0
  21. data/lib/flipper/ui/assets/javascripts/application.coffee +0 -305
  22. data/lib/flipper/ui/assets/stylesheets/_bootstrap-compass.scss +9 -0
  23. data/lib/flipper/ui/assets/stylesheets/_bootstrap-mincer.scss +19 -0
  24. data/lib/flipper/ui/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
  25. data/lib/flipper/ui/assets/stylesheets/_bootstrap.scss +50 -0
  26. data/lib/flipper/ui/assets/stylesheets/application.scss +33 -216
  27. data/lib/flipper/ui/assets/stylesheets/bootstrap/_alerts.scss +73 -0
  28. data/lib/flipper/ui/assets/stylesheets/bootstrap/_badges.scss +68 -0
  29. data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumbs.scss +26 -0
  30. data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-groups.scss +243 -0
  31. data/lib/flipper/ui/assets/stylesheets/bootstrap/_buttons.scss +160 -0
  32. data/lib/flipper/ui/assets/stylesheets/bootstrap/_carousel.scss +269 -0
  33. data/lib/flipper/ui/assets/stylesheets/bootstrap/_close.scss +36 -0
  34. data/lib/flipper/ui/assets/stylesheets/bootstrap/_code.scss +69 -0
  35. data/lib/flipper/ui/assets/stylesheets/bootstrap/_component-animations.scss +37 -0
  36. data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdowns.scss +214 -0
  37. data/lib/flipper/ui/assets/stylesheets/bootstrap/_forms.scss +578 -0
  38. data/lib/flipper/ui/assets/stylesheets/bootstrap/_glyphicons.scss +305 -0
  39. data/lib/flipper/ui/assets/stylesheets/bootstrap/_grid.scss +84 -0
  40. data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-groups.scss +166 -0
  41. data/lib/flipper/ui/assets/stylesheets/bootstrap/_jumbotron.scss +50 -0
  42. data/lib/flipper/ui/assets/stylesheets/bootstrap/_labels.scss +66 -0
  43. data/lib/flipper/ui/assets/stylesheets/bootstrap/_list-group.scss +124 -0
  44. data/lib/flipper/ui/assets/stylesheets/bootstrap/_media.scss +61 -0
  45. data/lib/flipper/ui/assets/stylesheets/bootstrap/_mixins.scss +39 -0
  46. data/lib/flipper/ui/assets/stylesheets/bootstrap/_modals.scss +150 -0
  47. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navbar.scss +662 -0
  48. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navs.scss +242 -0
  49. data/lib/flipper/ui/assets/stylesheets/bootstrap/_normalize.scss +427 -0
  50. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pager.scss +54 -0
  51. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pagination.scss +88 -0
  52. data/lib/flipper/ui/assets/stylesheets/bootstrap/_panels.scss +265 -0
  53. data/lib/flipper/ui/assets/stylesheets/bootstrap/_popovers.scss +135 -0
  54. data/lib/flipper/ui/assets/stylesheets/bootstrap/_print.scss +107 -0
  55. data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress-bars.scss +87 -0
  56. data/lib/flipper/ui/assets/stylesheets/bootstrap/_responsive-embed.scss +35 -0
  57. data/lib/flipper/ui/assets/stylesheets/bootstrap/_responsive-utilities.scss +177 -0
  58. data/lib/flipper/ui/assets/stylesheets/bootstrap/_scaffolding.scss +162 -0
  59. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tables.scss +234 -0
  60. data/lib/flipper/ui/assets/stylesheets/bootstrap/_theme.scss +273 -0
  61. data/lib/flipper/ui/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
  62. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tooltip.scss +102 -0
  63. data/lib/flipper/ui/assets/stylesheets/bootstrap/_type.scss +298 -0
  64. data/lib/flipper/ui/assets/stylesheets/bootstrap/_utilities.scss +55 -0
  65. data/lib/flipper/ui/assets/stylesheets/bootstrap/_variables.scss +866 -0
  66. data/lib/flipper/ui/assets/stylesheets/bootstrap/_wells.scss +29 -0
  67. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
  68. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_background-variant.scss +11 -0
  69. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  70. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_buttons.scss +52 -0
  71. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  72. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  73. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_forms.scss +88 -0
  74. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
  75. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  76. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  77. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  78. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
  79. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  80. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_list-group.scss +31 -0
  81. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  82. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  83. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
  84. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_pagination.scss +23 -0
  85. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
  86. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
  87. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  88. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  89. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
  90. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  91. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  92. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  93. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +11 -0
  94. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  95. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  96. data/lib/flipper/ui/assets/stylesheets/primer/.scss-lint.yml +446 -0
  97. data/lib/flipper/ui/assets/stylesheets/primer/_alerts.scss +106 -0
  98. data/lib/flipper/ui/assets/stylesheets/primer/_avatars.scss +36 -0
  99. data/lib/flipper/ui/assets/stylesheets/primer/_base.scss +40 -0
  100. data/lib/flipper/ui/assets/stylesheets/primer/_blankslate.scss +96 -0
  101. data/lib/flipper/ui/assets/stylesheets/primer/_buttons.scss +404 -0
  102. data/lib/flipper/ui/assets/stylesheets/primer/_counter.scss +10 -0
  103. data/lib/flipper/ui/assets/stylesheets/primer/_filter-list.scss +68 -0
  104. data/lib/flipper/ui/assets/stylesheets/primer/_flex-table.scss +20 -0
  105. data/lib/flipper/ui/assets/stylesheets/primer/_forms.scss +756 -0
  106. data/lib/flipper/ui/assets/stylesheets/primer/_layout.scss +69 -0
  107. data/lib/flipper/ui/assets/stylesheets/primer/_menu.scss +113 -0
  108. data/lib/flipper/ui/assets/stylesheets/primer/_mixins.scss +53 -0
  109. data/lib/flipper/ui/assets/stylesheets/primer/_normalize.scss +425 -0
  110. data/lib/flipper/ui/assets/stylesheets/primer/_states.scss +32 -0
  111. data/lib/flipper/ui/assets/stylesheets/primer/_tabnav.scss +65 -0
  112. data/lib/flipper/ui/assets/stylesheets/primer/_tooltips.scss +255 -0
  113. data/lib/flipper/ui/assets/stylesheets/primer/_truncate.scss +27 -0
  114. data/lib/flipper/ui/assets/stylesheets/primer/_type.scss +92 -0
  115. data/lib/flipper/ui/assets/stylesheets/primer/_utility.scss +73 -0
  116. data/lib/flipper/ui/assets/stylesheets/primer/_variables.scss +34 -0
  117. data/lib/flipper/ui/assets/stylesheets/primer/primer.scss +39 -0
  118. data/lib/flipper/ui/decorators/feature.rb +37 -4
  119. data/lib/flipper/ui/middleware.rb +12 -3
  120. data/lib/flipper/ui/public/css/application.css +2563 -144
  121. data/lib/flipper/ui/public/css/primer.css +1 -0
  122. data/lib/flipper/ui/public/css/primer/primer.css +1933 -0
  123. data/lib/flipper/ui/public/css/scss/primer.css +1933 -0
  124. data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  125. data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
  126. data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  127. data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  128. data/lib/flipper/ui/public/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  129. data/lib/flipper/ui/public/js/application.js +0 -539
  130. data/lib/flipper/ui/public/js/bootstrap-sprockets.js +12 -0
  131. data/lib/flipper/ui/public/js/bootstrap.js +2317 -0
  132. data/lib/flipper/ui/public/js/bootstrap.min.js +7 -0
  133. data/lib/flipper/ui/public/js/bootstrap/affix.js +162 -0
  134. data/lib/flipper/ui/public/js/bootstrap/alert.js +94 -0
  135. data/lib/flipper/ui/public/js/bootstrap/button.js +116 -0
  136. data/lib/flipper/ui/public/js/bootstrap/carousel.js +237 -0
  137. data/lib/flipper/ui/public/js/bootstrap/collapse.js +211 -0
  138. data/lib/flipper/ui/public/js/bootstrap/dropdown.js +161 -0
  139. data/lib/flipper/ui/public/js/bootstrap/modal.js +339 -0
  140. data/lib/flipper/ui/public/js/bootstrap/popover.js +108 -0
  141. data/lib/flipper/ui/public/js/bootstrap/scrollspy.js +172 -0
  142. data/lib/flipper/ui/public/js/bootstrap/tab.js +153 -0
  143. data/lib/flipper/ui/public/js/bootstrap/tooltip.js +476 -0
  144. data/lib/flipper/ui/public/js/bootstrap/transition.js +59 -0
  145. data/lib/flipper/ui/public/octicons/LICENSE.txt +9 -0
  146. data/lib/flipper/ui/public/octicons/README.md +1 -0
  147. data/lib/flipper/ui/public/octicons/octicons-local.ttf +0 -0
  148. data/lib/flipper/ui/public/octicons/octicons.css +236 -0
  149. data/lib/flipper/ui/public/octicons/octicons.eot +0 -0
  150. data/lib/flipper/ui/public/octicons/octicons.less +235 -0
  151. data/lib/flipper/ui/public/octicons/octicons.svg +200 -0
  152. data/lib/flipper/ui/public/octicons/octicons.ttf +0 -0
  153. data/lib/flipper/ui/public/octicons/octicons.woff +0 -0
  154. data/lib/flipper/ui/public/octicons/sprockets-octicons.scss +232 -0
  155. data/lib/flipper/ui/util.rb +4 -0
  156. data/lib/flipper/ui/version.rb +1 -1
  157. data/lib/flipper/ui/views/add_actor.erb +22 -0
  158. data/lib/flipper/ui/views/add_feature.erb +18 -0
  159. data/lib/flipper/ui/views/add_group.erb +31 -0
  160. data/lib/flipper/ui/views/feature.erb +209 -0
  161. data/lib/flipper/ui/views/features.erb +46 -0
  162. data/lib/flipper/ui/views/layout.erb +31 -149
  163. data/script/release +15 -0
  164. data/spec/flipper/ui/actions/actors_gate_spec.rb +68 -0
  165. data/spec/flipper/ui/actions/add_feature_spec.rb +17 -0
  166. data/spec/flipper/ui/actions/boolean_gate_spec.rb +41 -0
  167. data/spec/flipper/ui/actions/feature_spec.rb +59 -0
  168. data/spec/flipper/ui/actions/features_spec.rb +37 -0
  169. data/spec/flipper/ui/actions/file_spec.rb +43 -0
  170. data/spec/flipper/ui/actions/gate_spec.rb +24 -0
  171. data/spec/flipper/ui/actions/groups_gate_spec.rb +80 -0
  172. data/spec/flipper/ui/actions/home_spec.rb +16 -0
  173. data/spec/flipper/ui/actions/percentage_of_actors_gate_spec.rb +40 -0
  174. data/spec/flipper/ui/actions/percentage_of_time_gate_spec.rb +39 -0
  175. data/spec/flipper/ui/decorators/feature_spec.rb +38 -1
  176. data/spec/flipper/ui/decorators/gate_spec.rb +1 -1
  177. data/spec/flipper/ui_spec.rb +18 -441
  178. data/spec/helper.rb +22 -7
  179. metadata +199 -52
  180. data/examples/flipper.html +0 -14
  181. data/examples/flipper.png +0 -0
  182. data/lib/flipper/ui/assets/javascripts/spine/ajax.coffee +0 -223
  183. data/lib/flipper/ui/assets/javascripts/spine/list.coffee +0 -43
  184. data/lib/flipper/ui/assets/javascripts/spine/local.coffee +0 -16
  185. data/lib/flipper/ui/assets/javascripts/spine/manager.coffee +0 -83
  186. data/lib/flipper/ui/assets/javascripts/spine/relation.coffee +0 -148
  187. data/lib/flipper/ui/assets/javascripts/spine/route.coffee +0 -146
  188. data/lib/flipper/ui/assets/javascripts/spine/spine.coffee +0 -542
  189. data/lib/flipper/ui/assets/javascripts/spine/version +0 -1
  190. data/lib/flipper/ui/public/css/images/animated-overlay.gif +0 -0
  191. data/lib/flipper/ui/public/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  192. data/lib/flipper/ui/public/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  193. data/lib/flipper/ui/public/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  194. data/lib/flipper/ui/public/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  195. data/lib/flipper/ui/public/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  196. data/lib/flipper/ui/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  197. data/lib/flipper/ui/public/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  198. data/lib/flipper/ui/public/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  199. data/lib/flipper/ui/public/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  200. data/lib/flipper/ui/public/css/images/ui-icons_222222_256x240.png +0 -0
  201. data/lib/flipper/ui/public/css/images/ui-icons_228ef1_256x240.png +0 -0
  202. data/lib/flipper/ui/public/css/images/ui-icons_ef8c08_256x240.png +0 -0
  203. data/lib/flipper/ui/public/css/images/ui-icons_ffd27a_256x240.png +0 -0
  204. data/lib/flipper/ui/public/css/images/ui-icons_ffffff_256x240.png +0 -0
  205. data/lib/flipper/ui/public/css/jquery-ui-1.10.3.slider.min.css +0 -5
  206. data/lib/flipper/ui/public/js/handlebars.js +0 -1992
  207. data/lib/flipper/ui/public/js/jquery-ui-1.10.3.slider.min.js +0 -6
  208. data/lib/flipper/ui/public/js/jquery.js +0 -9555
  209. data/lib/flipper/ui/public/js/jquery.min.js +0 -4
  210. data/lib/flipper/ui/public/js/jquery.min.map +0 -1
  211. data/lib/flipper/ui/public/js/spine/ajax.js +0 -320
  212. data/lib/flipper/ui/public/js/spine/list.js +0 -72
  213. data/lib/flipper/ui/public/js/spine/local.js +0 -29
  214. data/lib/flipper/ui/public/js/spine/manager.js +0 -157
  215. data/lib/flipper/ui/public/js/spine/relation.js +0 -260
  216. data/lib/flipper/ui/public/js/spine/route.js +0 -223
  217. data/lib/flipper/ui/public/js/spine/spine.js +0 -927
  218. data/lib/flipper/ui/views/index.erb +0 -9
@@ -0,0 +1,10 @@
1
+ .counter {
2
+ display: inline-block;
3
+ padding: 2px 5px;
4
+ font-size: 11px;
5
+ font-weight: bold;
6
+ line-height: 1;
7
+ color: #777;
8
+ background-color: #eee;
9
+ border-radius: 20px;
10
+ }
@@ -0,0 +1,68 @@
1
+ // Filters list
2
+ //
3
+ // A vertical list of filters.
4
+ .filter-list {
5
+ list-style-type: none;
6
+
7
+ &.small .filter-item {
8
+ padding: 4px 10px;
9
+ margin: 0 0 2px;
10
+ font-size: 12px;
11
+ }
12
+
13
+ &.pjax-active .filter-item {
14
+ color: #777;
15
+ background-color: transparent;
16
+
17
+ &.pjax-active {
18
+ color: #fff;
19
+ background-color: $brand-blue;
20
+ }
21
+ }
22
+ }
23
+
24
+ .filter-item {
25
+ position: relative;
26
+ display: block;
27
+ padding: 8px 10px;
28
+ margin-bottom: 5px;
29
+ overflow: hidden;
30
+ font-size: 14px;
31
+ color: #777;
32
+ text-decoration: none;
33
+ text-overflow: ellipsis;
34
+ white-space: nowrap;
35
+ cursor: pointer;
36
+ border-radius: 3px;
37
+
38
+ &:hover {
39
+ text-decoration: none;
40
+ background-color: #eee;
41
+ }
42
+
43
+ &.selected {
44
+ color: #fff;
45
+ background-color: $brand-blue;
46
+
47
+ .octicon-remove-close {
48
+ float: right;
49
+ opacity: 0.8;
50
+ }
51
+ }
52
+
53
+ .count {
54
+ float: right;
55
+ font-weight: bold;
56
+ }
57
+
58
+ .bar {
59
+ position: absolute;
60
+ top: 2px;
61
+ right: 0;
62
+ bottom: 2px;
63
+ z-index: -1;
64
+ display: inline-block;
65
+ background-color: #f1f1f1;
66
+ }
67
+ }
68
+
@@ -0,0 +1,20 @@
1
+ // Flex table is a module for creating dynamically resizable elements that
2
+ // always sit on the same horizontal line (e.g., they never wrap). Using
3
+ // tables means it's cross browser friendly.
4
+
5
+ .flex-table {
6
+ display: table;
7
+ }
8
+
9
+ // Place this on every "cell"
10
+ .flex-table-item {
11
+ display: table-cell;
12
+ width: 1%;
13
+ white-space: nowrap;
14
+ vertical-align: middle;
15
+ }
16
+
17
+ // Place this on the largest or most important "cell"
18
+ .flex-table-item-primary {
19
+ width: 99%;
20
+ }
@@ -0,0 +1,756 @@
1
+ // Base form controls
2
+ //
3
+ // Overrides for common inputs for easier styling.
4
+
5
+ fieldset {
6
+ padding: 0;
7
+ margin: 0;
8
+ border: 0;
9
+ }
10
+
11
+ label {
12
+ font-size: 13px;
13
+ font-weight: bold;
14
+ }
15
+
16
+ .form-control,
17
+ input[type="text"],
18
+ input[type="password"],
19
+ input[type="email"],
20
+ input[type="number"],
21
+ input[type="tel"],
22
+ input[type="url"],
23
+ textarea {
24
+ min-height: 34px;
25
+ padding: 7px 8px;
26
+ font-size: 13px;
27
+ color: #333;
28
+ vertical-align: middle;
29
+ background-color: #fff;
30
+ background-repeat: no-repeat; // Repeat and position set for form states (success, error, etc)
31
+ background-position: right center;
32
+ border: 1px solid #ccc;
33
+ border-radius: 3px;
34
+ outline: none;
35
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
36
+
37
+ &.focus,
38
+ &:focus {
39
+ border-color: #51a7e8;
40
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(81, 167, 232, 0.5);
41
+ }
42
+ }
43
+
44
+ // Inputs with contrast for easy light gray backgrounds against white.
45
+ // input.class is needed here to increase specificity over input[…]
46
+ input.input-contrast,
47
+ .input-contrast {
48
+ background-color: #fafafa;
49
+
50
+ &:focus { background-color: #fff; }
51
+ }
52
+
53
+ // Custom styling for HTML5 validation bubbles (WebKit only)
54
+ ::-webkit-input-placeholder,
55
+ :-moz-placeholder {
56
+ color: #aaa;
57
+ }
58
+
59
+ ::-webkit-validation-bubble-message {
60
+ font-size: 12px;
61
+ color: #fff;
62
+ background: #9c2400;
63
+ border: 0;
64
+ border-radius: 3px;
65
+ -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
66
+ }
67
+
68
+ input::-webkit-validation-bubble-icon {
69
+ display: none;
70
+ }
71
+
72
+ ::-webkit-validation-bubble-arrow {
73
+ background-color: #9c2400;
74
+ border: solid 1px #9c2400;
75
+ -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
76
+ }
77
+
78
+ // Mini inputs, to match .minibutton
79
+ input.input-mini {
80
+ min-height: 26px;
81
+ padding-top: 4px;
82
+ padding-bottom: 4px;
83
+ font-size: 12px;
84
+ }
85
+
86
+ // Large inputs
87
+ input.input-large {
88
+ padding: 6px 10px;
89
+ font-size: 16px;
90
+ }
91
+
92
+ // Full-width inputs
93
+ .input-block {
94
+ display: block;
95
+ width: 100%;
96
+ }
97
+
98
+ // Inputs with monospace text
99
+ .input-monospace {
100
+ font-family: $mono-font;
101
+ }
102
+
103
+ // Form groups
104
+ //
105
+ // Typical form groups - `<dl.form>` with a `<dt>` containing the label and
106
+ // `<dd> containing the form elements.
107
+ dl.form {
108
+ margin: 15px 0;
109
+
110
+ input[type="text"],
111
+ input[type="password"],
112
+ input[type="email"],
113
+ input[type="url"],
114
+ textarea {
115
+ background-color: #fafafa;
116
+
117
+ &:focus {
118
+ background-color: #fff;
119
+ }
120
+ }
121
+
122
+ // The Label
123
+ > dt {
124
+ margin: 0 0 6px;
125
+
126
+ label {
127
+ position: relative;
128
+ }
129
+ }
130
+
131
+ &.flattened > dt {
132
+ float: left;
133
+ margin: 0;
134
+ line-height: 32px;
135
+ }
136
+
137
+ &.flattened > dd {
138
+ line-height: 32px;
139
+ }
140
+
141
+ //
142
+ // Form Elements
143
+ //
144
+
145
+ > dd {
146
+ // Text fields
147
+ input[type="text"],
148
+ input[type="password"],
149
+ input[type="email"],
150
+ input[type="url"] {
151
+ width: 440px;
152
+ max-width: 100%;
153
+ margin-right: 5px;
154
+ background-position-x: 98%;
155
+ }
156
+
157
+ input {
158
+ &.shorter { width: 130px; }
159
+
160
+ &.short { width: 250px; }
161
+
162
+ &.long { width: 100%; }
163
+ }
164
+
165
+ // Textarea
166
+ textarea {
167
+ width: 100%;
168
+ height: 200px;
169
+ min-height: 200px;
170
+
171
+ &.short {
172
+ height: 50px;
173
+ min-height: 50px;
174
+ }
175
+ }
176
+
177
+ h4 {
178
+ margin: 4px 0 0;
179
+
180
+ &.is-error { color: $brand-red; }
181
+
182
+ &.is-success { color: $brand-green; }
183
+ }
184
+
185
+ h4 + p.note {
186
+ margin-top: 0;
187
+ }
188
+
189
+ }
190
+
191
+ //
192
+ // Variants
193
+ //
194
+
195
+ &.required {
196
+ > dt > label:after {
197
+ padding-left: 5px;
198
+ color: #9f1006;
199
+ content: "*";
200
+ }
201
+ }
202
+ }
203
+
204
+ .note {
205
+ min-height: 17px;
206
+ margin: 4px 0 2px;
207
+ font-size: 12px;
208
+ color: #777;
209
+
210
+ .spinner {
211
+ margin-right: 3px;
212
+ vertical-align: middle;
213
+ }
214
+ }
215
+
216
+
217
+ // Checkboxes and Radiobuttons
218
+ //
219
+ // For checkboxes and radio button selections.
220
+ .form-checkbox {
221
+ padding-left: 20px;
222
+ margin: 15px 0;
223
+ vertical-align: middle;
224
+
225
+ label {
226
+
227
+ em.highlight {
228
+ position: relative;
229
+ left: -4px;
230
+ padding: 2px 4px;
231
+ font-style: normal;
232
+ background: #fffbdc;
233
+ border-radius: 3px;
234
+ }
235
+ }
236
+
237
+ input[type=checkbox],
238
+ input[type=radio] {
239
+ float: left;
240
+ margin: 2px 0 0 -20px;
241
+ vertical-align: middle;
242
+ }
243
+
244
+ .note {
245
+ display: block;
246
+ margin: 0;
247
+ font-size: 12px;
248
+ font-weight: normal;
249
+ color: #666;
250
+ }
251
+ }
252
+
253
+
254
+ // Form AJAX states
255
+ //
256
+ // Form fields that need feedback for AJAX loading, success
257
+ // states and errored states.
258
+ dl.form {
259
+ .success,
260
+ .error,
261
+ .indicator {
262
+ display: none;
263
+ font-size: 12px;
264
+ font-weight: bold;
265
+ }
266
+
267
+ &.loading {
268
+ opacity: 0.5;
269
+
270
+ .indicator {
271
+ display: inline;
272
+ }
273
+
274
+ .spinner {
275
+ display: inline-block;
276
+ vertical-align: middle;
277
+ }
278
+ }
279
+
280
+ &.successful {
281
+ .success {
282
+ display: inline;
283
+ color: #390;
284
+ }
285
+ }
286
+
287
+ &.errored {
288
+ > dt label {
289
+ color: #900;
290
+ }
291
+
292
+ // General text next to the field
293
+ .error {
294
+ display: inline;
295
+ color: #900;
296
+ }
297
+
298
+ // Specific error explanations from the server
299
+ dd.error,
300
+ dd.warning {
301
+ display: inline-block;
302
+ padding: 5px;
303
+ font-size: 11px;
304
+ color: #494620;
305
+ background: #f7ea57;
306
+ border: 1px solid #c0b536;
307
+ border-top-color: #fff;
308
+ border-bottom-right-radius: 3px;
309
+ border-bottom-left-radius: 3px;
310
+ }
311
+ }
312
+
313
+ &.warn {
314
+ // General text next to the field
315
+ .warning {
316
+ display: inline;
317
+ color: #900;
318
+ }
319
+
320
+ // Specific warning explanations from the server
321
+ dd.warning {
322
+ display: inline-block;
323
+ padding: 5px;
324
+ font-size: 11px;
325
+ color: #494620;
326
+ background: #f7ea57;
327
+ border: 1px solid #c0b536;
328
+ border-top-color: #fff;
329
+ border-bottom-right-radius: 3px;
330
+ border-bottom-left-radius: 3px;
331
+ }
332
+ }
333
+
334
+ .form-note {
335
+ display: inline-block;
336
+ padding: 5px;
337
+ margin-top: -1px;
338
+ font-size: 11px;
339
+ color: #494620;
340
+ background: #f7ea57;
341
+ border: 1px solid #c0b536;
342
+ border-top-color: #fff;
343
+ border-bottom-right-radius: 3px;
344
+ border-bottom-left-radius: 3px;
345
+ }
346
+ }
347
+
348
+
349
+ // Field groups
350
+ //
351
+ // Wrap field groups in `<div.hfields>` to lay them out horizontally - great for
352
+ // the top of pages with autosave.
353
+ .hfields {
354
+ margin: 15px 0;
355
+ @include clearfix;
356
+
357
+ dl.form {
358
+ float: left;
359
+ margin: 0 30px 0 0;
360
+
361
+ & > dt label {
362
+ display: inline-block;
363
+ margin: 5px 0 0;
364
+ color: #666;
365
+
366
+ img {
367
+ position: relative;
368
+ top: -2px;
369
+ }
370
+ }
371
+ }
372
+
373
+ .btn {
374
+ float: left;
375
+ margin: 28px 25px 0 -20px;
376
+ }
377
+
378
+ select { margin-top: 5px; }
379
+ }
380
+
381
+ // IE 9
382
+ html.no-dnd-uploads {
383
+ .drag-and-drop {
384
+ min-height: 32px;
385
+
386
+ .default {
387
+ display: none;
388
+ }
389
+ }
390
+
391
+ .upload-enabled textarea {
392
+ border-bottom: 1px solid #ddd;
393
+ }
394
+ }
395
+
396
+ .drag-and-drop {
397
+ padding: 7px 10px;
398
+ margin: 0;
399
+ font-size: 13px;
400
+ line-height: 16px;
401
+ color: #aaa;
402
+ background-color: #fafafa;
403
+ border: 1px solid #ccc;
404
+ border-top: 0;
405
+ border-bottom-right-radius: 3px;
406
+ border-bottom-left-radius: 3px;
407
+
408
+ .default,
409
+ .loading,
410
+ .error {
411
+ display: none;
412
+ }
413
+
414
+ .error {
415
+ color: $brand-red;
416
+ }
417
+
418
+ // Spinner
419
+ img {
420
+ vertical-align: top;
421
+ }
422
+ }
423
+
424
+ .is-default .drag-and-drop .default {
425
+ display: inline-block;
426
+ }
427
+
428
+ .is-uploading .drag-and-drop .loading {
429
+ display: inline-block;
430
+ }
431
+
432
+ .is-bad-file .drag-and-drop .bad-file {
433
+ display: inline-block;
434
+ }
435
+
436
+ .is-too-big .drag-and-drop .too-big {
437
+ display: inline-block;
438
+ }
439
+
440
+ .is-empty .drag-and-drop .empty {
441
+ display: inline-block;
442
+ }
443
+
444
+ .is-bad-browser .drag-and-drop .bad-browser {
445
+ display: inline-block;
446
+ }
447
+
448
+ .drag-and-drop-error-info {
449
+ font-weight: normal;
450
+ color: #aaa;
451
+
452
+ a {
453
+ color: $brand-blue;
454
+ }
455
+ }
456
+
457
+ .is-failed .drag-and-drop .failed-request {
458
+ display: inline-block;
459
+ }
460
+
461
+ .manual-file-chooser {
462
+ position: absolute;
463
+ width: 240px;
464
+ padding: 5px;
465
+ margin-left: -80px;
466
+ cursor: pointer;
467
+ opacity: 0.0001;
468
+ }
469
+
470
+ .manual-file-chooser:hover + .manual-file-chooser-text {
471
+ text-decoration: underline;
472
+ }
473
+
474
+ .btn {
475
+ // align manual-file-chooser inside a button
476
+ .manual-file-chooser {
477
+ top: 0;
478
+ padding: 0;
479
+ line-height: 34px;
480
+ }
481
+ }
482
+
483
+ // Focused Textarea styles
484
+ .upload-enabled textarea {
485
+ display: block;
486
+ border-bottom: 1px dashed #ddd;
487
+ border-bottom-right-radius: 0;
488
+ border-bottom-left-radius: 0;
489
+ }
490
+
491
+ .focused .drag-and-drop {
492
+ @extend input[type="text"]:focus;
493
+ box-shadow: rgba(#51a7e8, 0.5) 0 0 3px;
494
+ }
495
+
496
+ // Dropping a file on top
497
+ .dragover textarea,
498
+ .dragover .drag-and-drop {
499
+ box-shadow: rgba(#c9ff00, 1) 0 0 3px;
500
+ }
501
+
502
+
503
+ // Form style with a write and a preview tab
504
+ .previewable-comment-form {
505
+ position: relative;
506
+
507
+ .tabnav {
508
+ position: relative;
509
+ padding: 10px 10px 0;
510
+ }
511
+
512
+ .comment {
513
+ border: 1px solid #cacaca;
514
+ }
515
+
516
+ .comment-header .comment-header-actions { display: none; }
517
+
518
+ .comment-form-error { margin-bottom: 10px; }
519
+
520
+ .write-content,
521
+ .preview-content {
522
+ display: none;
523
+ padding: 0 10px 10px;
524
+ }
525
+
526
+ &.write-selected .write-content,
527
+ &.preview-selected .preview-content {
528
+ display: block;
529
+ }
530
+
531
+ textarea {
532
+ display: block;
533
+ width: 100%;
534
+ min-height: 100px;
535
+ max-height: 500px;
536
+ padding: 10px;
537
+ resize: vertical;
538
+
539
+ &.fullscreen-contents:focus {
540
+ border: 0;
541
+ box-shadow: none;
542
+ }
543
+ }
544
+ }
545
+
546
+
547
+ // A two column form, with a .main and a .sidebar column
548
+ //
549
+ // Override some `.timeline-comment-wrapper` defaults.
550
+ // The `div` is needed to be more specific than the other class.
551
+ div.composer {
552
+ margin-top: 0;
553
+ border: 0;
554
+ }
555
+
556
+ // Override the previewable comment form defaults
557
+ .composer .comment-form-textarea {
558
+ height: 200px;
559
+ min-height: 200px;
560
+ }
561
+
562
+ .composer-infobar {
563
+ height: 35px;
564
+ padding: 0 10px;
565
+ margin-bottom: 10px;
566
+ border-bottom: 1px solid #eee;
567
+ }
568
+
569
+ .composer .tabnav { margin: 0 0 10px; }
570
+
571
+ .infobar-widget {
572
+
573
+ &.milestone {
574
+ position: relative; // requires so that the `right: 0;` below works
575
+ float: right;
576
+
577
+ .select-menu-modal-holder { right: 0; }
578
+ }
579
+
580
+ &.assignee {
581
+ float: left;
582
+
583
+ .css-truncate-target {
584
+ max-width: 110px;
585
+ }
586
+ }
587
+
588
+ .text,
589
+ .avatar,
590
+ .select-menu {
591
+ display: inline-block;
592
+ vertical-align: top;
593
+ }
594
+
595
+ .text {
596
+ margin-top: 3px;
597
+
598
+ a {
599
+ font-weight: bold;
600
+ color: #333;
601
+ }
602
+ }
603
+
604
+ .progress-bar {
605
+ width: 200px;
606
+ overflow: hidden; // round the corners if 100%
607
+ line-height: 18px;
608
+ }
609
+ }
610
+
611
+
612
+ // Hide the up/down buttons in <input type="number"> in the login form, the
613
+ // input is used for two-factor auth codes, type="number" makes it more usable
614
+ // on phones
615
+ input::-webkit-outer-spin-button,
616
+ input::-webkit-inner-spin-button {
617
+ margin: 0;
618
+ -webkit-appearance: none;
619
+ }
620
+
621
+
622
+ // Input groups
623
+ .input-group {
624
+ display: table;
625
+
626
+ input {
627
+ position: relative;
628
+ width: 100%;
629
+
630
+ &:focus {
631
+ z-index: 2;
632
+ }
633
+ }
634
+
635
+ input[type="text"] + .btn {
636
+ margin-left: 0;
637
+ }
638
+
639
+ // For when you want the input group to behave like inline-block.
640
+ &.inline {
641
+ display: inline-table;
642
+ }
643
+ }
644
+
645
+ .input-group input,
646
+ .input-group-button {
647
+ display: table-cell;
648
+ }
649
+
650
+ .input-group-button {
651
+ width: 1%;
652
+ vertical-align: middle; // Match the inputs
653
+ }
654
+
655
+ .input-group input:first-child,
656
+ .input-group-button:first-child .btn {
657
+ border-top-right-radius: 0;
658
+ border-bottom-right-radius: 0;
659
+ }
660
+
661
+ .input-group-button:first-child .btn {
662
+ margin-right: -1px;
663
+ }
664
+
665
+ .input-group input:last-child,
666
+ .input-group-button:last-child .btn {
667
+ border-top-left-radius: 0;
668
+ border-bottom-left-radius: 0;
669
+ }
670
+
671
+ .input-group-button:last-child .btn {
672
+ margin-left: -1px;
673
+ }
674
+
675
+ h2.account {
676
+ margin: 15px 0 0;
677
+ font-size: 18px;
678
+ font-weight: normal;
679
+ color: #666;
680
+ }
681
+
682
+ p.explain {
683
+ position: relative;
684
+ font-size: 12px;
685
+ color: #666;
686
+
687
+ strong {
688
+ color: #333;
689
+ }
690
+
691
+ .octicon {
692
+ margin-right: 5px;
693
+ color: #bbb;
694
+ }
695
+
696
+ .minibutton {
697
+ top: -4px;
698
+ float: right;
699
+ }
700
+ }
701
+
702
+ .options-content p.explain {
703
+ padding: 10px 10px 0;
704
+ margin-top: 0;
705
+ border-top: 1px solid #ddd;
706
+ }
707
+
708
+ .form-actions {
709
+ @include clearfix;
710
+
711
+ .btn {
712
+ float: right;
713
+
714
+ + .btn {
715
+ margin-right: 5px;
716
+ }
717
+ }
718
+ }
719
+
720
+ .form-warning {
721
+ padding: 8px 10px;
722
+ margin: 10px 0;
723
+ font-size: 14px;
724
+ color: #333;
725
+ background: #ffffe2;
726
+ border: 1px solid #e7e4c2;
727
+ border-radius: 4px;
728
+
729
+ p {
730
+ margin: 0;
731
+ line-height: 1.5;
732
+ }
733
+
734
+ strong { color: #000; }
735
+
736
+ a { font-weight: bold; }
737
+ }
738
+
739
+
740
+ // Inline verification
741
+ //
742
+ // Used for example when autosaving checkboxes in settings.
743
+ .status-indicator {
744
+ @include icon-bootstrap(16px);
745
+ margin-left: 5px;
746
+ }
747
+
748
+ .status-indicator-success:before {
749
+ color: $brand-green;
750
+ content: "\f03a"; // octicon-check
751
+ }
752
+
753
+ .status-indicator-failed:before {
754
+ color: $brand-red;
755
+ content: "\f02d"; // octicon-x
756
+ }