tennpipes-su 3.6.6

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.
Files changed (192) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.rdoc +70 -0
  4. data/Rakefile +22 -0
  5. data/lib/tennpipes-su.rb +35 -0
  6. data/lib/tennpipes-su/access_control.rb +191 -0
  7. data/lib/tennpipes-su/bootstrap-less/alerts.less +67 -0
  8. data/lib/tennpipes-su/bootstrap-less/badges.less +55 -0
  9. data/lib/tennpipes-su/bootstrap-less/bootstrap.less +49 -0
  10. data/lib/tennpipes-su/bootstrap-less/breadcrumbs.less +26 -0
  11. data/lib/tennpipes-su/bootstrap-less/button-groups.less +226 -0
  12. data/lib/tennpipes-su/bootstrap-less/buttons.less +155 -0
  13. data/lib/tennpipes-su/bootstrap-less/carousel.less +232 -0
  14. data/lib/tennpipes-su/bootstrap-less/close.less +33 -0
  15. data/lib/tennpipes-su/bootstrap-less/code.less +63 -0
  16. data/lib/tennpipes-su/bootstrap-less/component-animations.less +29 -0
  17. data/lib/tennpipes-su/bootstrap-less/dropdowns.less +213 -0
  18. data/lib/tennpipes-su/bootstrap-less/font-awesome/bordered-pulled.less +16 -0
  19. data/lib/tennpipes-su/bootstrap-less/font-awesome/core.less +12 -0
  20. data/lib/tennpipes-su/bootstrap-less/font-awesome/fixed-width.less +6 -0
  21. data/lib/tennpipes-su/bootstrap-less/font-awesome/font-awesome.less +17 -0
  22. data/lib/tennpipes-su/bootstrap-less/font-awesome/icons.less +412 -0
  23. data/lib/tennpipes-su/bootstrap-less/font-awesome/larger.less +13 -0
  24. data/lib/tennpipes-su/bootstrap-less/font-awesome/list.less +19 -0
  25. data/lib/tennpipes-su/bootstrap-less/font-awesome/mixins.less +20 -0
  26. data/lib/tennpipes-su/bootstrap-less/font-awesome/path.less +14 -0
  27. data/lib/tennpipes-su/bootstrap-less/font-awesome/rotated-flipped.less +9 -0
  28. data/lib/tennpipes-su/bootstrap-less/font-awesome/spinning.less +30 -0
  29. data/lib/tennpipes-su/bootstrap-less/font-awesome/stacked.less +20 -0
  30. data/lib/tennpipes-su/bootstrap-less/font-awesome/variables.less +381 -0
  31. data/lib/tennpipes-su/bootstrap-less/forms.less +419 -0
  32. data/lib/tennpipes-su/bootstrap-less/glyphicons.less +233 -0
  33. data/lib/tennpipes-su/bootstrap-less/grid.less +100 -0
  34. data/lib/tennpipes-su/bootstrap-less/input-groups.less +157 -0
  35. data/lib/tennpipes-su/bootstrap-less/jumbotron.less +44 -0
  36. data/lib/tennpipes-su/bootstrap-less/labels.less +64 -0
  37. data/lib/tennpipes-su/bootstrap-less/list-group.less +110 -0
  38. data/lib/tennpipes-su/bootstrap-less/media.less +56 -0
  39. data/lib/tennpipes-su/bootstrap-less/mixins.less +926 -0
  40. data/lib/tennpipes-su/bootstrap-less/modals.less +138 -0
  41. data/lib/tennpipes-su/bootstrap-less/navbar.less +616 -0
  42. data/lib/tennpipes-su/bootstrap-less/navs.less +242 -0
  43. data/lib/tennpipes-su/bootstrap-less/normalize.less +423 -0
  44. data/lib/tennpipes-su/bootstrap-less/pager.less +55 -0
  45. data/lib/tennpipes-su/bootstrap-less/pagination.less +88 -0
  46. data/lib/tennpipes-su/bootstrap-less/panels.less +230 -0
  47. data/lib/tennpipes-su/bootstrap-less/popovers.less +133 -0
  48. data/lib/tennpipes-su/bootstrap-less/print.less +101 -0
  49. data/lib/tennpipes-su/bootstrap-less/progress-bars.less +80 -0
  50. data/lib/tennpipes-su/bootstrap-less/responsive-utilities.less +93 -0
  51. data/lib/tennpipes-su/bootstrap-less/scaffolding.less +134 -0
  52. data/lib/tennpipes-su/bootstrap-less/tables.less +233 -0
  53. data/lib/tennpipes-su/bootstrap-less/tennpipes-su.less +18 -0
  54. data/lib/tennpipes-su/bootstrap-less/theme.less +247 -0
  55. data/lib/tennpipes-su/bootstrap-less/thumbnails.less +36 -0
  56. data/lib/tennpipes-su/bootstrap-less/tooltip.less +95 -0
  57. data/lib/tennpipes-su/bootstrap-less/type.less +296 -0
  58. data/lib/tennpipes-su/bootstrap-less/utilities.less +56 -0
  59. data/lib/tennpipes-su/bootstrap-less/variables.less +827 -0
  60. data/lib/tennpipes-su/bootstrap-less/wells.less +29 -0
  61. data/lib/tennpipes-su/generators/actions.rb +78 -0
  62. data/lib/tennpipes-su/generators/admin_app.rb +169 -0
  63. data/lib/tennpipes-su/generators/admin_page.rb +68 -0
  64. data/lib/tennpipes-su/generators/orm.rb +172 -0
  65. data/lib/tennpipes-su/generators/templates/account/activerecord.rb.tt +41 -0
  66. data/lib/tennpipes-su/generators/templates/account/couchrest.rb.tt +67 -0
  67. data/lib/tennpipes-su/generators/templates/account/datamapper.rb.tt +56 -0
  68. data/lib/tennpipes-su/generators/templates/account/dynamoid.rb.tt +55 -0
  69. data/lib/tennpipes-su/generators/templates/account/minirecord.rb.tt +44 -0
  70. data/lib/tennpipes-su/generators/templates/account/mongoid.rb.tt +54 -0
  71. data/lib/tennpipes-su/generators/templates/account/mongomapper.rb.tt +47 -0
  72. data/lib/tennpipes-su/generators/templates/account/ohm.rb.tt +70 -0
  73. data/lib/tennpipes-su/generators/templates/account/seeds.rb.tt +29 -0
  74. data/lib/tennpipes-su/generators/templates/account/sequel.rb.tt +53 -0
  75. data/lib/tennpipes-su/generators/templates/app.rb.tt +42 -0
  76. data/lib/tennpipes-su/generators/templates/app/controllers/base.rb.tt +5 -0
  77. data/lib/tennpipes-su/generators/templates/app/controllers/sessions.rb.tt +29 -0
  78. data/lib/tennpipes-su/generators/templates/assets/images/favicon.ico +0 -0
  79. data/lib/tennpipes-su/generators/templates/assets/images/font/FontAwesome.otf +0 -0
  80. data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.eot +0 -0
  81. data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.svg +414 -0
  82. data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.ttf +0 -0
  83. data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.woff +0 -0
  84. data/lib/tennpipes-su/generators/templates/assets/images/logo.png +0 -0
  85. data/lib/tennpipes-su/generators/templates/assets/javascripts/application.js +118 -0
  86. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/affix.js +137 -0
  87. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/alert.js +88 -0
  88. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/bootstrap.min.js +6 -0
  89. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/button.js +107 -0
  90. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/carousel.js +205 -0
  91. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/collapse.js +170 -0
  92. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/dropdown.js +147 -0
  93. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/modal.js +243 -0
  94. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/popover.js +110 -0
  95. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/scrollspy.js +153 -0
  96. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/tab.js +125 -0
  97. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/tooltip.js +399 -0
  98. data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/transition.js +48 -0
  99. data/lib/tennpipes-su/generators/templates/assets/javascripts/jquery-1.11.0.min.js +4 -0
  100. data/lib/tennpipes-su/generators/templates/assets/stylesheets/application.css +353 -0
  101. data/lib/tennpipes-su/generators/templates/assets/stylesheets/bootstrap.css +4 -0
  102. data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/FontAwesome.otf +0 -0
  103. data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.eot +0 -0
  104. data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.svg +414 -0
  105. data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.ttf +0 -0
  106. data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.woff +0 -0
  107. data/lib/tennpipes-su/generators/templates/erb/app/base/index.erb.tt +15 -0
  108. data/lib/tennpipes-su/generators/templates/erb/app/errors/403.erb.tt +3 -0
  109. data/lib/tennpipes-su/generators/templates/erb/app/errors/404.erb.tt +3 -0
  110. data/lib/tennpipes-su/generators/templates/erb/app/errors/500.erb.tt +3 -0
  111. data/lib/tennpipes-su/generators/templates/erb/app/layouts/application.erb.tt +64 -0
  112. data/lib/tennpipes-su/generators/templates/erb/app/layouts/error.erb.tt +23 -0
  113. data/lib/tennpipes-su/generators/templates/erb/app/sessions/new.erb.tt +44 -0
  114. data/lib/tennpipes-su/generators/templates/erb/page/_form.erb.tt +18 -0
  115. data/lib/tennpipes-su/generators/templates/erb/page/edit.erb.tt +10 -0
  116. data/lib/tennpipes-su/generators/templates/erb/page/index.erb.tt +81 -0
  117. data/lib/tennpipes-su/generators/templates/erb/page/new.erb.tt +9 -0
  118. data/lib/tennpipes-su/generators/templates/haml/app/base/index.haml.tt +12 -0
  119. data/lib/tennpipes-su/generators/templates/haml/app/errors/403.haml.tt +3 -0
  120. data/lib/tennpipes-su/generators/templates/haml/app/errors/404.haml.tt +3 -0
  121. data/lib/tennpipes-su/generators/templates/haml/app/errors/500.haml.tt +3 -0
  122. data/lib/tennpipes-su/generators/templates/haml/app/layouts/application.haml.tt +49 -0
  123. data/lib/tennpipes-su/generators/templates/haml/app/layouts/error.haml.tt +18 -0
  124. data/lib/tennpipes-su/generators/templates/haml/app/sessions/new.haml.tt +38 -0
  125. data/lib/tennpipes-su/generators/templates/haml/page/_form.haml.tt +16 -0
  126. data/lib/tennpipes-su/generators/templates/haml/page/edit.haml.tt +8 -0
  127. data/lib/tennpipes-su/generators/templates/haml/page/index.haml.tt +58 -0
  128. data/lib/tennpipes-su/generators/templates/haml/page/new.haml.tt +7 -0
  129. data/lib/tennpipes-su/generators/templates/page/controller.rb.tt +92 -0
  130. data/lib/tennpipes-su/generators/templates/slim/app/base/index.slim.tt +12 -0
  131. data/lib/tennpipes-su/generators/templates/slim/app/errors/403.slim.tt +3 -0
  132. data/lib/tennpipes-su/generators/templates/slim/app/errors/404.slim.tt +3 -0
  133. data/lib/tennpipes-su/generators/templates/slim/app/errors/500.slim.tt +3 -0
  134. data/lib/tennpipes-su/generators/templates/slim/app/layouts/application.slim.tt +48 -0
  135. data/lib/tennpipes-su/generators/templates/slim/app/layouts/error.slim.tt +19 -0
  136. data/lib/tennpipes-su/generators/templates/slim/app/sessions/new.slim.tt +37 -0
  137. data/lib/tennpipes-su/generators/templates/slim/page/_form.slim.tt +16 -0
  138. data/lib/tennpipes-su/generators/templates/slim/page/edit.slim.tt +8 -0
  139. data/lib/tennpipes-su/generators/templates/slim/page/index.slim.tt +56 -0
  140. data/lib/tennpipes-su/generators/templates/slim/page/new.slim.tt +7 -0
  141. data/lib/tennpipes-su/helpers/authentication_helpers.rb +108 -0
  142. data/lib/tennpipes-su/helpers/view_helpers.rb +87 -0
  143. data/lib/tennpipes-su/locale/admin/cs.yml +56 -0
  144. data/lib/tennpipes-su/locale/admin/da.yml +56 -0
  145. data/lib/tennpipes-su/locale/admin/de.yml +56 -0
  146. data/lib/tennpipes-su/locale/admin/en.yml +56 -0
  147. data/lib/tennpipes-su/locale/admin/es.yml +56 -0
  148. data/lib/tennpipes-su/locale/admin/fr.yml +56 -0
  149. data/lib/tennpipes-su/locale/admin/hu.yml +56 -0
  150. data/lib/tennpipes-su/locale/admin/it.yml +56 -0
  151. data/lib/tennpipes-su/locale/admin/ja.yml +57 -0
  152. data/lib/tennpipes-su/locale/admin/lv.yml +56 -0
  153. data/lib/tennpipes-su/locale/admin/nl.yml +56 -0
  154. data/lib/tennpipes-su/locale/admin/no.yml +56 -0
  155. data/lib/tennpipes-su/locale/admin/pl.yml +56 -0
  156. data/lib/tennpipes-su/locale/admin/pt_br.yml +56 -0
  157. data/lib/tennpipes-su/locale/admin/ro.yml +56 -0
  158. data/lib/tennpipes-su/locale/admin/ru.yml +57 -0
  159. data/lib/tennpipes-su/locale/admin/sv.yml +56 -0
  160. data/lib/tennpipes-su/locale/admin/tr.yml +56 -0
  161. data/lib/tennpipes-su/locale/admin/uk.yml +56 -0
  162. data/lib/tennpipes-su/locale/admin/zh_cn.yml +56 -0
  163. data/lib/tennpipes-su/locale/admin/zh_tw.yml +56 -0
  164. data/lib/tennpipes-su/locale/orm/cs.yml +12 -0
  165. data/lib/tennpipes-su/locale/orm/da.yml +12 -0
  166. data/lib/tennpipes-su/locale/orm/de.yml +12 -0
  167. data/lib/tennpipes-su/locale/orm/en.yml +12 -0
  168. data/lib/tennpipes-su/locale/orm/es.yml +12 -0
  169. data/lib/tennpipes-su/locale/orm/fr.yml +12 -0
  170. data/lib/tennpipes-su/locale/orm/hu.yml +12 -0
  171. data/lib/tennpipes-su/locale/orm/it.yml +12 -0
  172. data/lib/tennpipes-su/locale/orm/ja.yml +12 -0
  173. data/lib/tennpipes-su/locale/orm/lv.yml +12 -0
  174. data/lib/tennpipes-su/locale/orm/nl.yml +12 -0
  175. data/lib/tennpipes-su/locale/orm/no.yml +12 -0
  176. data/lib/tennpipes-su/locale/orm/pl.yml +38 -0
  177. data/lib/tennpipes-su/locale/orm/pt_br.yml +12 -0
  178. data/lib/tennpipes-su/locale/orm/ro.yml +12 -0
  179. data/lib/tennpipes-su/locale/orm/ru.yml +12 -0
  180. data/lib/tennpipes-su/locale/orm/sv.yml +12 -0
  181. data/lib/tennpipes-su/locale/orm/tr.yml +12 -0
  182. data/lib/tennpipes-su/locale/orm/uk.yml +12 -0
  183. data/lib/tennpipes-su/locale/orm/zh_cn.yml +12 -0
  184. data/lib/tennpipes-su/locale/orm/zh_tw.yml +12 -0
  185. data/test/fixtures/sequel.rb +72 -0
  186. data/test/generators/test_account_model_generator.rb +108 -0
  187. data/test/generators/test_admin_app_generator.rb +218 -0
  188. data/test/generators/test_admin_page_generator.rb +140 -0
  189. data/test/helper.rb +47 -0
  190. data/test/test_admin_application.rb +271 -0
  191. data/test/test_locale.rb +25 -0
  192. metadata +298 -0
@@ -0,0 +1,419 @@
1
+ //
2
+ // Forms
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Normalize non-controls
7
+ //
8
+ // Restyle and baseline non-control form elements.
9
+
10
+ fieldset {
11
+ padding: 0;
12
+ margin: 0;
13
+ border: 0;
14
+ // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,
15
+ // so we reset that to ensure it behaves more like a standard block element.
16
+ // See https://github.com/twbs/bootstrap/issues/12359.
17
+ min-width: 0;
18
+ }
19
+
20
+ legend {
21
+ display: block;
22
+ width: 100%;
23
+ padding: 0;
24
+ margin-bottom: @line-height-computed;
25
+ font-size: (@font-size-base * 1.5);
26
+ line-height: inherit;
27
+ color: @legend-color;
28
+ border: 0;
29
+ border-bottom: 1px solid @legend-border-color;
30
+ }
31
+
32
+ label {
33
+ display: inline-block;
34
+ margin-bottom: 5px;
35
+ font-weight: bold;
36
+ }
37
+
38
+
39
+ // Normalize form controls
40
+ //
41
+ // While most of our form styles require extra classes, some basic normalization
42
+ // is required to ensure optimum display with or without those classes to better
43
+ // address browser inconsistencies.
44
+
45
+ // Override content-box in Normalize (* isn't specific enough)
46
+ input[type="search"] {
47
+ .box-sizing(border-box);
48
+ }
49
+
50
+ // Position radios and checkboxes better
51
+ input[type="radio"],
52
+ input[type="checkbox"] {
53
+ margin: 4px 0 0;
54
+ margin-top: 1px \9; /* IE8-9 */
55
+ line-height: normal;
56
+ }
57
+
58
+ // Set the height of file controls to match text inputs
59
+ input[type="file"] {
60
+ display: block;
61
+ }
62
+
63
+ // Make range inputs behave like textual form controls
64
+ input[type="range"] {
65
+ display: block;
66
+ width: 100%;
67
+ }
68
+
69
+ // Make multiple select elements height not fixed
70
+ select[multiple],
71
+ select[size] {
72
+ height: auto;
73
+ }
74
+
75
+ // Focus for file, radio, and checkbox
76
+ input[type="file"]:focus,
77
+ input[type="radio"]:focus,
78
+ input[type="checkbox"]:focus {
79
+ .tab-focus();
80
+ }
81
+
82
+ // Adjust output element
83
+ output {
84
+ display: block;
85
+ padding-top: (@padding-base-vertical + 1);
86
+ font-size: @font-size-base;
87
+ line-height: @line-height-base;
88
+ color: @input-color;
89
+ }
90
+
91
+
92
+ // Common form controls
93
+ //
94
+ // Shared size and type resets for form controls. Apply `.form-control` to any
95
+ // of the following form controls:
96
+ //
97
+ // select
98
+ // textarea
99
+ // input[type="text"]
100
+ // input[type="password"]
101
+ // input[type="datetime"]
102
+ // input[type="datetime-local"]
103
+ // input[type="date"]
104
+ // input[type="month"]
105
+ // input[type="time"]
106
+ // input[type="week"]
107
+ // input[type="number"]
108
+ // input[type="email"]
109
+ // input[type="url"]
110
+ // input[type="search"]
111
+ // input[type="tel"]
112
+ // input[type="color"]
113
+
114
+ .form-control {
115
+ display: block;
116
+ width: 100%;
117
+ height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
118
+ padding: @padding-base-vertical @padding-base-horizontal;
119
+ font-size: @font-size-base;
120
+ line-height: @line-height-base;
121
+ color: @input-color;
122
+ background-color: @input-bg;
123
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
124
+ border: 1px solid @input-border;
125
+ border-radius: @input-border-radius;
126
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
127
+ .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
128
+
129
+ // Customize the `:focus` state to imitate native WebKit styles.
130
+ .form-control-focus();
131
+
132
+ // Placeholder
133
+ .placeholder();
134
+
135
+ // Disabled and read-only inputs
136
+ // Note: HTML5 says that controls under a fieldset > legend:first-child won't
137
+ // be disabled if the fieldset is disabled. Due to implementation difficulty,
138
+ // we don't honor that edge case; we style them as disabled anyway.
139
+ &[disabled],
140
+ &[readonly],
141
+ fieldset[disabled] & {
142
+ cursor: not-allowed;
143
+ background-color: @input-bg-disabled;
144
+ opacity: 1; // iOS fix for unreadable disabled content
145
+ }
146
+
147
+ // Reset height for `textarea`s
148
+ textarea& {
149
+ height: auto;
150
+ }
151
+ }
152
+
153
+ // Special styles for iOS date input
154
+ //
155
+ // In Mobile Safari, date inputs require a pixel line-height that matches the
156
+ // given height of the input.
157
+ input[type="date"] {
158
+ line-height: @input-height-base;
159
+ }
160
+
161
+
162
+ // Form groups
163
+ //
164
+ // Designed to help with the organization and spacing of vertical forms. For
165
+ // horizontal forms, use the predefined grid classes.
166
+
167
+ .form-group {
168
+ margin-bottom: 15px;
169
+ }
170
+
171
+
172
+ // Checkboxes and radios
173
+ //
174
+ // Indent the labels to position radios/checkboxes as hanging controls.
175
+
176
+ .radio,
177
+ .checkbox {
178
+ display: block;
179
+ min-height: @line-height-computed; // clear the floating input if there is no label text
180
+ margin-top: 10px;
181
+ margin-bottom: 10px;
182
+ padding-left: 20px;
183
+ label {
184
+ display: inline;
185
+ font-weight: normal;
186
+ cursor: pointer;
187
+ }
188
+ }
189
+ .radio input[type="radio"],
190
+ .radio-inline input[type="radio"],
191
+ .checkbox input[type="checkbox"],
192
+ .checkbox-inline input[type="checkbox"] {
193
+ float: left;
194
+ margin-left: -20px;
195
+ }
196
+ .radio + .radio,
197
+ .checkbox + .checkbox {
198
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
199
+ }
200
+
201
+ // Radios and checkboxes on same line
202
+ .radio-inline,
203
+ .checkbox-inline {
204
+ display: inline-block;
205
+ padding-left: 20px;
206
+ margin-bottom: 0;
207
+ vertical-align: middle;
208
+ font-weight: normal;
209
+ cursor: pointer;
210
+ }
211
+ .radio-inline + .radio-inline,
212
+ .checkbox-inline + .checkbox-inline {
213
+ margin-top: 0;
214
+ margin-left: 10px; // space out consecutive inline controls
215
+ }
216
+
217
+ // Apply same disabled cursor tweak as for inputs
218
+ //
219
+ // Note: Neither radios nor checkboxes can be readonly.
220
+ input[type="radio"],
221
+ input[type="checkbox"],
222
+ .radio,
223
+ .radio-inline,
224
+ .checkbox,
225
+ .checkbox-inline {
226
+ &[disabled],
227
+ fieldset[disabled] & {
228
+ cursor: not-allowed;
229
+ }
230
+ }
231
+
232
+
233
+ // Form control sizing
234
+ //
235
+ // Build on `.form-control` with modifier classes to decrease or increase the
236
+ // height and font-size of form controls.
237
+
238
+ .input-sm {
239
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
240
+ }
241
+
242
+ .input-lg {
243
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
244
+ }
245
+
246
+
247
+ // Form control feedback states
248
+ //
249
+ // Apply contextual and semantic states to individual form controls.
250
+
251
+ .has-feedback {
252
+ // Enable absolute positioning
253
+ position: relative;
254
+
255
+ // Ensure icons don't overlap text
256
+ .form-control {
257
+ padding-right: (@input-height-base * 1.25);
258
+ }
259
+
260
+ // Feedback icon (requires .glyphicon classes)
261
+ .form-control-feedback {
262
+ position: absolute;
263
+ top: (@line-height-computed + 5); // Height of the `label` and its margin
264
+ right: 0;
265
+ display: block;
266
+ width: @input-height-base;
267
+ height: @input-height-base;
268
+ line-height: @input-height-base;
269
+ text-align: center;
270
+ }
271
+ }
272
+
273
+ // Feedback states
274
+ .has-success {
275
+ .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
276
+ }
277
+ .has-warning {
278
+ .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
279
+ }
280
+ .has-error {
281
+ .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
282
+ }
283
+
284
+
285
+ // Static form control text
286
+ //
287
+ // Apply class to a `p` element to make any string of text align with labels in
288
+ // a horizontal form layout.
289
+
290
+ .form-control-static {
291
+ margin-bottom: 0; // Remove default margin from `p`
292
+ }
293
+
294
+
295
+ // Help text
296
+ //
297
+ // Apply to any element you wish to create light text for placement immediately
298
+ // below a form control. Use for general help, formatting, or instructional text.
299
+
300
+ .help-block {
301
+ display: block; // account for any element using help-block
302
+ margin-top: 5px;
303
+ margin-bottom: 10px;
304
+ color: lighten(@text-color, 25%); // lighten the text some for contrast
305
+ }
306
+
307
+
308
+
309
+ // Inline forms
310
+ //
311
+ // Make forms appear inline(-block) by adding the `.form-inline` class. Inline
312
+ // forms begin stacked on extra small (mobile) devices and then go inline when
313
+ // viewports reach <768px.
314
+ //
315
+ // Requires wrapping inputs and labels with `.form-group` for proper display of
316
+ // default HTML form controls and our custom form controls (e.g., input groups).
317
+ //
318
+ // Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
319
+
320
+ .form-inline {
321
+
322
+ // Kick in the inline
323
+ @media (min-width: @screen-sm-min) {
324
+ // Inline-block all the things for "inline"
325
+ .form-group {
326
+ display: inline-block;
327
+ margin-bottom: 0;
328
+ vertical-align: middle;
329
+ }
330
+
331
+ // In navbar-form, allow folks to *not* use `.form-group`
332
+ .form-control {
333
+ display: inline-block;
334
+ width: auto; // Prevent labels from stacking above inputs in `.form-group`
335
+ vertical-align: middle;
336
+ }
337
+
338
+ .control-label {
339
+ margin-bottom: 0;
340
+ vertical-align: middle;
341
+ }
342
+
343
+ // Remove default margin on radios/checkboxes that were used for stacking, and
344
+ // then undo the floating of radios and checkboxes to match (which also avoids
345
+ // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
346
+ .radio,
347
+ .checkbox {
348
+ display: inline-block;
349
+ margin-top: 0;
350
+ margin-bottom: 0;
351
+ padding-left: 0;
352
+ vertical-align: middle;
353
+ }
354
+ .radio input[type="radio"],
355
+ .checkbox input[type="checkbox"] {
356
+ float: none;
357
+ margin-left: 0;
358
+ }
359
+
360
+ // Validation states
361
+ //
362
+ // Reposition the icon because it's now within a grid column and columns have
363
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
364
+ .has-feedback .form-control-feedback {
365
+ top: 0;
366
+ }
367
+ }
368
+ }
369
+
370
+
371
+ // Horizontal forms
372
+ //
373
+ // Horizontal forms are built on grid classes and allow you to create forms with
374
+ // labels on the left and inputs on the right.
375
+
376
+ .form-horizontal {
377
+
378
+ // Consistent vertical alignment of labels, radios, and checkboxes
379
+ .control-label,
380
+ .radio,
381
+ .checkbox,
382
+ .radio-inline,
383
+ .checkbox-inline {
384
+ margin-top: 0;
385
+ margin-bottom: 0;
386
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
387
+ }
388
+ // Account for padding we're adding to ensure the alignment and of help text
389
+ // and other content below items
390
+ .radio,
391
+ .checkbox {
392
+ min-height: (@line-height-computed + (@padding-base-vertical + 1));
393
+ }
394
+
395
+ // Make form groups behave like rows
396
+ .form-group {
397
+ .make-row();
398
+ }
399
+
400
+ .form-control-static {
401
+ padding-top: (@padding-base-vertical + 1);
402
+ }
403
+
404
+ // Only right align form labels here when the columns stop stacking
405
+ @media (min-width: @screen-sm-min) {
406
+ .control-label {
407
+ text-align: right;
408
+ }
409
+ }
410
+
411
+ // Validation states
412
+ //
413
+ // Reposition the icon because it's now within a grid column and columns have
414
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
415
+ .has-feedback .form-control-feedback {
416
+ top: 0;
417
+ right: (@grid-gutter-width / 2);
418
+ }
419
+ }
@@ -0,0 +1,233 @@
1
+ //
2
+ // Glyphicons for Bootstrap
3
+ //
4
+ // Since icons are fonts, they can be placed anywhere text is placed and are
5
+ // thus automatically sized to match the surrounding child. To use, create an
6
+ // inline element with the appropriate classes, like so:
7
+ //
8
+ // <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
9
+
10
+ // Import the fonts
11
+ @font-face {
12
+ font-family: 'Glyphicons Halflings';
13
+ src: ~"url('@{icon-font-path}@{icon-font-name}.eot')";
14
+ src: ~"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')",
15
+ ~"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')",
16
+ ~"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')",
17
+ ~"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')";
18
+ }
19
+
20
+ // Catchall baseclass
21
+ .glyphicon {
22
+ position: relative;
23
+ top: 1px;
24
+ display: inline-block;
25
+ font-family: 'Glyphicons Halflings';
26
+ font-style: normal;
27
+ font-weight: normal;
28
+ line-height: 1;
29
+ -webkit-font-smoothing: antialiased;
30
+ -moz-osx-font-smoothing: grayscale;
31
+ }
32
+
33
+ // Individual icons
34
+ .glyphicon-asterisk { &:before { content: "\2a"; } }
35
+ .glyphicon-plus { &:before { content: "\2b"; } }
36
+ .glyphicon-euro { &:before { content: "\20ac"; } }
37
+ .glyphicon-minus { &:before { content: "\2212"; } }
38
+ .glyphicon-cloud { &:before { content: "\2601"; } }
39
+ .glyphicon-envelope { &:before { content: "\2709"; } }
40
+ .glyphicon-pencil { &:before { content: "\270f"; } }
41
+ .glyphicon-glass { &:before { content: "\e001"; } }
42
+ .glyphicon-music { &:before { content: "\e002"; } }
43
+ .glyphicon-search { &:before { content: "\e003"; } }
44
+ .glyphicon-heart { &:before { content: "\e005"; } }
45
+ .glyphicon-star { &:before { content: "\e006"; } }
46
+ .glyphicon-star-empty { &:before { content: "\e007"; } }
47
+ .glyphicon-user { &:before { content: "\e008"; } }
48
+ .glyphicon-film { &:before { content: "\e009"; } }
49
+ .glyphicon-th-large { &:before { content: "\e010"; } }
50
+ .glyphicon-th { &:before { content: "\e011"; } }
51
+ .glyphicon-th-list { &:before { content: "\e012"; } }
52
+ .glyphicon-ok { &:before { content: "\e013"; } }
53
+ .glyphicon-remove { &:before { content: "\e014"; } }
54
+ .glyphicon-zoom-in { &:before { content: "\e015"; } }
55
+ .glyphicon-zoom-out { &:before { content: "\e016"; } }
56
+ .glyphicon-off { &:before { content: "\e017"; } }
57
+ .glyphicon-signal { &:before { content: "\e018"; } }
58
+ .glyphicon-cog { &:before { content: "\e019"; } }
59
+ .glyphicon-trash { &:before { content: "\e020"; } }
60
+ .glyphicon-home { &:before { content: "\e021"; } }
61
+ .glyphicon-file { &:before { content: "\e022"; } }
62
+ .glyphicon-time { &:before { content: "\e023"; } }
63
+ .glyphicon-road { &:before { content: "\e024"; } }
64
+ .glyphicon-download-alt { &:before { content: "\e025"; } }
65
+ .glyphicon-download { &:before { content: "\e026"; } }
66
+ .glyphicon-upload { &:before { content: "\e027"; } }
67
+ .glyphicon-inbox { &:before { content: "\e028"; } }
68
+ .glyphicon-play-circle { &:before { content: "\e029"; } }
69
+ .glyphicon-repeat { &:before { content: "\e030"; } }
70
+ .glyphicon-refresh { &:before { content: "\e031"; } }
71
+ .glyphicon-list-alt { &:before { content: "\e032"; } }
72
+ .glyphicon-lock { &:before { content: "\e033"; } }
73
+ .glyphicon-flag { &:before { content: "\e034"; } }
74
+ .glyphicon-headphones { &:before { content: "\e035"; } }
75
+ .glyphicon-volume-off { &:before { content: "\e036"; } }
76
+ .glyphicon-volume-down { &:before { content: "\e037"; } }
77
+ .glyphicon-volume-up { &:before { content: "\e038"; } }
78
+ .glyphicon-qrcode { &:before { content: "\e039"; } }
79
+ .glyphicon-barcode { &:before { content: "\e040"; } }
80
+ .glyphicon-tag { &:before { content: "\e041"; } }
81
+ .glyphicon-tags { &:before { content: "\e042"; } }
82
+ .glyphicon-book { &:before { content: "\e043"; } }
83
+ .glyphicon-bookmark { &:before { content: "\e044"; } }
84
+ .glyphicon-print { &:before { content: "\e045"; } }
85
+ .glyphicon-camera { &:before { content: "\e046"; } }
86
+ .glyphicon-font { &:before { content: "\e047"; } }
87
+ .glyphicon-bold { &:before { content: "\e048"; } }
88
+ .glyphicon-italic { &:before { content: "\e049"; } }
89
+ .glyphicon-text-height { &:before { content: "\e050"; } }
90
+ .glyphicon-text-width { &:before { content: "\e051"; } }
91
+ .glyphicon-align-left { &:before { content: "\e052"; } }
92
+ .glyphicon-align-center { &:before { content: "\e053"; } }
93
+ .glyphicon-align-right { &:before { content: "\e054"; } }
94
+ .glyphicon-align-justify { &:before { content: "\e055"; } }
95
+ .glyphicon-list { &:before { content: "\e056"; } }
96
+ .glyphicon-indent-left { &:before { content: "\e057"; } }
97
+ .glyphicon-indent-right { &:before { content: "\e058"; } }
98
+ .glyphicon-facetime-video { &:before { content: "\e059"; } }
99
+ .glyphicon-picture { &:before { content: "\e060"; } }
100
+ .glyphicon-map-marker { &:before { content: "\e062"; } }
101
+ .glyphicon-adjust { &:before { content: "\e063"; } }
102
+ .glyphicon-tint { &:before { content: "\e064"; } }
103
+ .glyphicon-edit { &:before { content: "\e065"; } }
104
+ .glyphicon-share { &:before { content: "\e066"; } }
105
+ .glyphicon-check { &:before { content: "\e067"; } }
106
+ .glyphicon-move { &:before { content: "\e068"; } }
107
+ .glyphicon-step-backward { &:before { content: "\e069"; } }
108
+ .glyphicon-fast-backward { &:before { content: "\e070"; } }
109
+ .glyphicon-backward { &:before { content: "\e071"; } }
110
+ .glyphicon-play { &:before { content: "\e072"; } }
111
+ .glyphicon-pause { &:before { content: "\e073"; } }
112
+ .glyphicon-stop { &:before { content: "\e074"; } }
113
+ .glyphicon-forward { &:before { content: "\e075"; } }
114
+ .glyphicon-fast-forward { &:before { content: "\e076"; } }
115
+ .glyphicon-step-forward { &:before { content: "\e077"; } }
116
+ .glyphicon-eject { &:before { content: "\e078"; } }
117
+ .glyphicon-chevron-left { &:before { content: "\e079"; } }
118
+ .glyphicon-chevron-right { &:before { content: "\e080"; } }
119
+ .glyphicon-plus-sign { &:before { content: "\e081"; } }
120
+ .glyphicon-minus-sign { &:before { content: "\e082"; } }
121
+ .glyphicon-remove-sign { &:before { content: "\e083"; } }
122
+ .glyphicon-ok-sign { &:before { content: "\e084"; } }
123
+ .glyphicon-question-sign { &:before { content: "\e085"; } }
124
+ .glyphicon-info-sign { &:before { content: "\e086"; } }
125
+ .glyphicon-screenshot { &:before { content: "\e087"; } }
126
+ .glyphicon-remove-circle { &:before { content: "\e088"; } }
127
+ .glyphicon-ok-circle { &:before { content: "\e089"; } }
128
+ .glyphicon-ban-circle { &:before { content: "\e090"; } }
129
+ .glyphicon-arrow-left { &:before { content: "\e091"; } }
130
+ .glyphicon-arrow-right { &:before { content: "\e092"; } }
131
+ .glyphicon-arrow-up { &:before { content: "\e093"; } }
132
+ .glyphicon-arrow-down { &:before { content: "\e094"; } }
133
+ .glyphicon-share-alt { &:before { content: "\e095"; } }
134
+ .glyphicon-resize-full { &:before { content: "\e096"; } }
135
+ .glyphicon-resize-small { &:before { content: "\e097"; } }
136
+ .glyphicon-exclamation-sign { &:before { content: "\e101"; } }
137
+ .glyphicon-gift { &:before { content: "\e102"; } }
138
+ .glyphicon-leaf { &:before { content: "\e103"; } }
139
+ .glyphicon-fire { &:before { content: "\e104"; } }
140
+ .glyphicon-eye-open { &:before { content: "\e105"; } }
141
+ .glyphicon-eye-close { &:before { content: "\e106"; } }
142
+ .glyphicon-warning-sign { &:before { content: "\e107"; } }
143
+ .glyphicon-plane { &:before { content: "\e108"; } }
144
+ .glyphicon-calendar { &:before { content: "\e109"; } }
145
+ .glyphicon-random { &:before { content: "\e110"; } }
146
+ .glyphicon-comment { &:before { content: "\e111"; } }
147
+ .glyphicon-magnet { &:before { content: "\e112"; } }
148
+ .glyphicon-chevron-up { &:before { content: "\e113"; } }
149
+ .glyphicon-chevron-down { &:before { content: "\e114"; } }
150
+ .glyphicon-retweet { &:before { content: "\e115"; } }
151
+ .glyphicon-shopping-cart { &:before { content: "\e116"; } }
152
+ .glyphicon-folder-close { &:before { content: "\e117"; } }
153
+ .glyphicon-folder-open { &:before { content: "\e118"; } }
154
+ .glyphicon-resize-vertical { &:before { content: "\e119"; } }
155
+ .glyphicon-resize-horizontal { &:before { content: "\e120"; } }
156
+ .glyphicon-hdd { &:before { content: "\e121"; } }
157
+ .glyphicon-bullhorn { &:before { content: "\e122"; } }
158
+ .glyphicon-bell { &:before { content: "\e123"; } }
159
+ .glyphicon-certificate { &:before { content: "\e124"; } }
160
+ .glyphicon-thumbs-up { &:before { content: "\e125"; } }
161
+ .glyphicon-thumbs-down { &:before { content: "\e126"; } }
162
+ .glyphicon-hand-right { &:before { content: "\e127"; } }
163
+ .glyphicon-hand-left { &:before { content: "\e128"; } }
164
+ .glyphicon-hand-up { &:before { content: "\e129"; } }
165
+ .glyphicon-hand-down { &:before { content: "\e130"; } }
166
+ .glyphicon-circle-arrow-right { &:before { content: "\e131"; } }
167
+ .glyphicon-circle-arrow-left { &:before { content: "\e132"; } }
168
+ .glyphicon-circle-arrow-up { &:before { content: "\e133"; } }
169
+ .glyphicon-circle-arrow-down { &:before { content: "\e134"; } }
170
+ .glyphicon-globe { &:before { content: "\e135"; } }
171
+ .glyphicon-wrench { &:before { content: "\e136"; } }
172
+ .glyphicon-tasks { &:before { content: "\e137"; } }
173
+ .glyphicon-filter { &:before { content: "\e138"; } }
174
+ .glyphicon-briefcase { &:before { content: "\e139"; } }
175
+ .glyphicon-fullscreen { &:before { content: "\e140"; } }
176
+ .glyphicon-dashboard { &:before { content: "\e141"; } }
177
+ .glyphicon-paperclip { &:before { content: "\e142"; } }
178
+ .glyphicon-heart-empty { &:before { content: "\e143"; } }
179
+ .glyphicon-link { &:before { content: "\e144"; } }
180
+ .glyphicon-phone { &:before { content: "\e145"; } }
181
+ .glyphicon-pushpin { &:before { content: "\e146"; } }
182
+ .glyphicon-usd { &:before { content: "\e148"; } }
183
+ .glyphicon-gbp { &:before { content: "\e149"; } }
184
+ .glyphicon-sort { &:before { content: "\e150"; } }
185
+ .glyphicon-sort-by-alphabet { &:before { content: "\e151"; } }
186
+ .glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } }
187
+ .glyphicon-sort-by-order { &:before { content: "\e153"; } }
188
+ .glyphicon-sort-by-order-alt { &:before { content: "\e154"; } }
189
+ .glyphicon-sort-by-attributes { &:before { content: "\e155"; } }
190
+ .glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
191
+ .glyphicon-unchecked { &:before { content: "\e157"; } }
192
+ .glyphicon-expand { &:before { content: "\e158"; } }
193
+ .glyphicon-collapse-down { &:before { content: "\e159"; } }
194
+ .glyphicon-collapse-up { &:before { content: "\e160"; } }
195
+ .glyphicon-log-in { &:before { content: "\e161"; } }
196
+ .glyphicon-flash { &:before { content: "\e162"; } }
197
+ .glyphicon-log-out { &:before { content: "\e163"; } }
198
+ .glyphicon-new-window { &:before { content: "\e164"; } }
199
+ .glyphicon-record { &:before { content: "\e165"; } }
200
+ .glyphicon-save { &:before { content: "\e166"; } }
201
+ .glyphicon-open { &:before { content: "\e167"; } }
202
+ .glyphicon-saved { &:before { content: "\e168"; } }
203
+ .glyphicon-import { &:before { content: "\e169"; } }
204
+ .glyphicon-export { &:before { content: "\e170"; } }
205
+ .glyphicon-send { &:before { content: "\e171"; } }
206
+ .glyphicon-floppy-disk { &:before { content: "\e172"; } }
207
+ .glyphicon-floppy-saved { &:before { content: "\e173"; } }
208
+ .glyphicon-floppy-remove { &:before { content: "\e174"; } }
209
+ .glyphicon-floppy-save { &:before { content: "\e175"; } }
210
+ .glyphicon-floppy-open { &:before { content: "\e176"; } }
211
+ .glyphicon-credit-card { &:before { content: "\e177"; } }
212
+ .glyphicon-transfer { &:before { content: "\e178"; } }
213
+ .glyphicon-cutlery { &:before { content: "\e179"; } }
214
+ .glyphicon-header { &:before { content: "\e180"; } }
215
+ .glyphicon-compressed { &:before { content: "\e181"; } }
216
+ .glyphicon-earphone { &:before { content: "\e182"; } }
217
+ .glyphicon-phone-alt { &:before { content: "\e183"; } }
218
+ .glyphicon-tower { &:before { content: "\e184"; } }
219
+ .glyphicon-stats { &:before { content: "\e185"; } }
220
+ .glyphicon-sd-video { &:before { content: "\e186"; } }
221
+ .glyphicon-hd-video { &:before { content: "\e187"; } }
222
+ .glyphicon-subtitles { &:before { content: "\e188"; } }
223
+ .glyphicon-sound-stereo { &:before { content: "\e189"; } }
224
+ .glyphicon-sound-dolby { &:before { content: "\e190"; } }
225
+ .glyphicon-sound-5-1 { &:before { content: "\e191"; } }
226
+ .glyphicon-sound-6-1 { &:before { content: "\e192"; } }
227
+ .glyphicon-sound-7-1 { &:before { content: "\e193"; } }
228
+ .glyphicon-copyright-mark { &:before { content: "\e194"; } }
229
+ .glyphicon-registration-mark { &:before { content: "\e195"; } }
230
+ .glyphicon-cloud-download { &:before { content: "\e197"; } }
231
+ .glyphicon-cloud-upload { &:before { content: "\e198"; } }
232
+ .glyphicon-tree-conifer { &:before { content: "\e199"; } }
233
+ .glyphicon-tree-deciduous { &:before { content: "\e200"; } }