hootstrap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +54 -0
  4. data/Rakefile +33 -0
  5. data/assets/javascripts/hootstrap/modal.js +795 -0
  6. data/assets/javascripts/hootstrap/rails.js +28 -0
  7. data/assets/javascripts/hootstrap/toast.js +166 -0
  8. data/assets/javascripts/hootstrap/utils/dynamicListener.js +80 -0
  9. data/assets/javascripts/hootstrap.js +3 -0
  10. data/assets/stylesheets/hootstrap/base/_base.scss +5 -0
  11. data/assets/stylesheets/hootstrap/base/_variables.scss +868 -0
  12. data/assets/stylesheets/hootstrap/base/mixins/_background.scss +8 -0
  13. data/assets/stylesheets/hootstrap/base/mixins/_button.scss +42 -0
  14. data/assets/stylesheets/hootstrap/base/mixins/_toast.scss +16 -0
  15. data/assets/stylesheets/hootstrap/base/mixins/_tooltip.scss +29 -0
  16. data/assets/stylesheets/hootstrap/components/_alert.scss +7 -0
  17. data/assets/stylesheets/hootstrap/components/_badge.scss +3 -0
  18. data/assets/stylesheets/hootstrap/components/_base.scss +6 -0
  19. data/assets/stylesheets/hootstrap/components/_button.scss +9 -0
  20. data/assets/stylesheets/hootstrap/components/_forms.scss +64 -0
  21. data/assets/stylesheets/hootstrap/components/_loader.scss +27 -0
  22. data/assets/stylesheets/hootstrap/components/_tooltip.scss +274 -0
  23. data/assets/stylesheets/hootstrap/patterns/_base.scss +5 -0
  24. data/assets/stylesheets/hootstrap/patterns/_card.scss +8 -0
  25. data/assets/stylesheets/hootstrap/patterns/_list-group.scss +8 -0
  26. data/assets/stylesheets/hootstrap/patterns/_navbar.scss +3 -0
  27. data/assets/stylesheets/hootstrap/patterns/_search.scss +45 -0
  28. data/assets/stylesheets/hootstrap/patterns/_toast.scss +34 -0
  29. data/assets/stylesheets/hootstrap/reset/_base.scss +1 -0
  30. data/assets/stylesheets/hootstrap/reset/_html.scss +4 -0
  31. data/assets/stylesheets/hootstrap/utils/_background.scss +3 -0
  32. data/assets/stylesheets/hootstrap/utils/_base.scss +5 -0
  33. data/assets/stylesheets/hootstrap/utils/_flex.scss +3 -0
  34. data/assets/stylesheets/hootstrap/utils/_opacity.scss +3 -0
  35. data/assets/stylesheets/hootstrap/utils/_sizing.scss +16 -0
  36. data/assets/stylesheets/hootstrap/utils/_transition.scss +0 -0
  37. data/assets/stylesheets/hootstrap/utils/_typography.scss +49 -0
  38. data/assets/stylesheets/hootstrap.scss +9 -0
  39. data/lib/hootstrap/engine.rb +9 -0
  40. data/lib/hootstrap/railtie.rb +10 -0
  41. data/lib/hootstrap/version.rb +3 -0
  42. data/lib/hootstrap.rb +20 -0
  43. metadata +141 -0
@@ -0,0 +1,8 @@
1
+ // Contextual backgrounds
2
+
3
+ @mixin bg-variant-hover($parent, $color) {
4
+ #{$parent}:hover {
5
+ @include transition($transition-base);
6
+ background-color: $color !important;
7
+ }
8
+ }
@@ -0,0 +1,42 @@
1
+ // Button variants
2
+ //
3
+ // Easily pump out default styles, as well as :hover, :focus, :active,
4
+ // and disabled options for all buttons
5
+
6
+ @mixin button-variants($background, $border, $active-background: darken($background, 7.5%), $active-border: darken($border, 10%)) {
7
+ color: color-yiq($background);
8
+ background: linear-gradient(to right, $background, lighten($background, 5%));
9
+ background-color: $background;
10
+ border-color: $border;
11
+ @include box-shadow($btn-box-shadow);
12
+
13
+ @include hover {
14
+ color: color-yiq($active-background);
15
+ background: linear-gradient(to right, $active-background, $background);
16
+ background-color: $active-background;
17
+ border-color: $active-border;
18
+ // box-shadow: 0 1px 1px 0 rgba($gray-dark, 0.15);
19
+ }
20
+
21
+ &:focus,
22
+ &.focus {
23
+ background-color: $active-background;
24
+ box-shadow: 0 0 0 1px $white, 0 0 0 3px rgba($active-background, 0.25);
25
+ }
26
+
27
+ // Disabled comes first so active can properly restyle
28
+ &.disabled,
29
+ &:disabled {
30
+ background-color: $background;
31
+ border-color: $border;
32
+ }
33
+
34
+ &:active,
35
+ &.active,
36
+ .show > &.dropdown-toggle {
37
+ background-color: $active-background;
38
+ background-image: none; // Remove the gradient for the pressed/active state
39
+ border-color: $active-border;
40
+ @include box-shadow($btn-active-box-shadow);
41
+ }
42
+ }
@@ -0,0 +1,16 @@
1
+ @mixin toast-variant($background, $border, $color) {
2
+ color: $color;
3
+ background-color: $background;
4
+ border-color: $border;
5
+
6
+ .close {
7
+ color: $color;
8
+ opacity: 0.75;
9
+ text-shadow: none;
10
+
11
+ &:hover,
12
+ &:focus {
13
+ opacity: 1;
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,29 @@
1
+ @mixin tooltip-arrow($color, $position: up) {
2
+ $degrees: 0;
3
+ $height: 6px;
4
+ $width: 18px;
5
+
6
+ @if ($position == down) {
7
+ $degrees: 180 18 6;
8
+ } @else if ($position == left) {
9
+ $degrees: -90 18 18;
10
+ $width: 6px;
11
+ $height: 18px;
12
+ } @else if ($position == right) {
13
+ $degrees: 90 6 6;
14
+ $width: 6px;
15
+ $height: 18px;
16
+ }
17
+
18
+ background: no-repeat
19
+ url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%22#{$width * 2}%22%20height%3D%22#{$height * 2}%22%3E%3Cpath%20fill%3D%22#{$color}%22%20transform%3D%22rotate(#{$degrees})%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E');
20
+ background-size: 100% auto;
21
+ width: $width;
22
+ height: $height;
23
+ }
24
+
25
+ @mixin tooltip-effects() {
26
+ opacity: 0;
27
+ pointer-events: none;
28
+ @include transition(all 0.18s ease-out 0.18s);
29
+ }
@@ -0,0 +1,7 @@
1
+ .alert-notice {
2
+ @extend .alert-success;
3
+ }
4
+
5
+ .alert-alert {
6
+ @extend .alert-danger;
7
+ }
@@ -0,0 +1,3 @@
1
+ .badge {
2
+ line-height: $badge-line-height;
3
+ }
@@ -0,0 +1,6 @@
1
+ @import "hootstrap/components/alert";
2
+ @import "hootstrap/components/badge";
3
+ @import "hootstrap/components/button";
4
+ @import "hootstrap/components/forms";
5
+ @import "hootstrap/components/loader";
6
+ @import "hootstrap/components/tooltip";
@@ -0,0 +1,9 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ @each $color, $value in $theme-colors {
6
+ .btn-#{$color} {
7
+ @include button-variants($value, $value);
8
+ }
9
+ }
@@ -0,0 +1,64 @@
1
+ //
2
+ // Textual form controls
3
+ //
4
+
5
+ .form-control {
6
+ transition: all $base-duration $base-timing;
7
+ }
8
+
9
+ //
10
+ // Target select specifically
11
+ //
12
+ select.form-control {
13
+ max-width: 100%;
14
+ padding-right: 24px;
15
+ padding-right: 8px \9;
16
+ background: $white
17
+ url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC")
18
+ no-repeat right 8px center;
19
+ background-image: none \9;
20
+ background-size: 8px 10px;
21
+ -webkit-appearance: none;
22
+ -moz-appearance: none;
23
+ appearance: none;
24
+ }
25
+
26
+ //
27
+ // Form Errors and Validation
28
+ //
29
+
30
+ .form-group-error {
31
+ background-color: $form-group-error-bg;
32
+ border-radius: $form-group-error-border-radius;
33
+ border: 1px solid $form-group-error-border;
34
+ color: $form-group-error-color;
35
+ display: inline-block;
36
+ font-size: $font-size-sm;
37
+ margin-top: 0.15rem;
38
+ padding: $form-group-error-padding-y $form-group-error-padding-x;
39
+ position: relative;
40
+ z-index: 3;
41
+
42
+ &::before,
43
+ &::after {
44
+ border: solid transparent;
45
+ bottom: 100%;
46
+ content: " ";
47
+ height: 0;
48
+ left: 10px;
49
+ pointer-events: none;
50
+ position: absolute;
51
+ width: 0;
52
+ }
53
+
54
+ &::before {
55
+ border-bottom-color: $form-group-error-border;
56
+ border-width: 6px;
57
+ margin-left: -1px;
58
+ }
59
+
60
+ &::after {
61
+ border-bottom-color: $form-group-error-bg;
62
+ border-width: 5px;
63
+ }
64
+ }
@@ -0,0 +1,27 @@
1
+ .loader,
2
+ .loader::after {
3
+ border-radius: 50%;
4
+ height: $loader-width;
5
+ width: $loader-width;
6
+ }
7
+
8
+ .loader {
9
+ animation: loader 0.95s infinite linear;
10
+ border-bottom: 0.25rem solid $loader-bg;
11
+ border-left: 0.25rem solid $loader-fg;
12
+ border-right: 0.25rem solid $loader-bg;
13
+ border-top: 0.25rem solid $loader-bg;
14
+ position: relative;
15
+ text-indent: -9999em;
16
+ transform: translateZ(0);
17
+ }
18
+
19
+ @keyframes loader {
20
+ 0% {
21
+ transform: rotate(0deg);
22
+ }
23
+
24
+ 100% {
25
+ transform: rotate(360deg);
26
+ }
27
+ }
@@ -0,0 +1,274 @@
1
+ // Copyright (c) 2016 Claudio Holanda
2
+
3
+ // IE 11 button bugfix
4
+ button[data-toggle="tooltip"] {
5
+ overflow: visible;
6
+ }
7
+
8
+ [data-toggle="tooltip"] {
9
+ position: relative;
10
+
11
+ // Fixing iOS Safari event issue.
12
+ // More info at: https://goo.gl/w8JF4W
13
+ cursor: pointer;
14
+
15
+ &::before,
16
+ &::after {
17
+ position: absolute;
18
+ z-index: 99;
19
+ }
20
+
21
+ &:after {
22
+ @include tooltip-effects();
23
+ background: $tooltip-bg;
24
+ border-radius: $border-radius;
25
+ color: $tooltip-color;
26
+ content: attr(title);
27
+ font-size: $font-size-sm;
28
+ padding: $tooltip-padding-y $tooltip-padding-x;
29
+ white-space: nowrap;
30
+ }
31
+
32
+ &:before {
33
+ @include tooltip-arrow($tooltip-arrow-color);
34
+ @include tooltip-effects();
35
+
36
+ content: '';
37
+ }
38
+
39
+ &:hover {
40
+ &:before,
41
+ &:after {
42
+ opacity: $tooltip-opacity;
43
+ pointer-events: auto;
44
+ }
45
+ }
46
+
47
+ &.font-awesome:after {
48
+ font-family: FontAwesome;
49
+ }
50
+
51
+ &[data-placement="top"] {
52
+ &:after {
53
+ bottom: 100%;
54
+ left: 50%;
55
+ margin-bottom: 5px + $tooltip-arrow-height;
56
+ transform: translate(-50%, 10px);
57
+ transform-origin: top;
58
+ }
59
+
60
+ &:before {
61
+ bottom: 100%;
62
+ left: 50%;
63
+ margin-bottom: 5px;
64
+ transform: translate(-50%, 10px);
65
+ transform-origin: top;
66
+ }
67
+
68
+ &:hover {
69
+ &:after {
70
+ transform: translate(-50%, 0);
71
+ }
72
+
73
+ &:before {
74
+ transform: translate(-50%, 0);
75
+ }
76
+ }
77
+ }
78
+
79
+ &[data-placement="top-left"] {
80
+ &:after {
81
+ bottom: 100%;
82
+ left: 0;
83
+ margin-bottom: 5px + $tooltip-arrow-height;
84
+ transform: translate(0, 10px);
85
+ transform-origin: top;
86
+ }
87
+
88
+ &:before {
89
+ bottom: 100%;
90
+ left: 5px;
91
+ margin-bottom: 5px;
92
+ transform: translate(0, 10px);
93
+ transform-origin: top;
94
+ }
95
+
96
+ &:hover {
97
+ &:after {
98
+ transform: translate(0, 0);
99
+ }
100
+
101
+ &:before {
102
+ transform: translate(0, 0);
103
+ }
104
+ }
105
+ }
106
+
107
+ &[data-placement="top-right"] {
108
+ &:after {
109
+ bottom: 100%;
110
+ right: 0;
111
+ margin-bottom: 5px + $tooltip-arrow-height;
112
+ transform: translate(0, 10px);
113
+ transform-origin: top;
114
+ }
115
+
116
+ &:before {
117
+ bottom: 100%;
118
+ right: 5px;
119
+ margin-bottom: 5px;
120
+ transform: translate(0, 10px);
121
+ transform-origin: top;
122
+ }
123
+
124
+ &:hover {
125
+ &:after {
126
+ transform: translate(0, 0);
127
+ }
128
+
129
+ &:before {
130
+ transform: translate(0, 0);
131
+ }
132
+ }
133
+ }
134
+
135
+ &[data-placement='bottom'] {
136
+ &:after {
137
+ left: 50%;
138
+ margin-top: 5px + $tooltip-arrow-height;
139
+ top: 100%;
140
+ transform: translate(-50%, -10px);
141
+ }
142
+
143
+ &:before {
144
+ @include tooltip-arrow($tooltip-arrow-color, 'down');
145
+
146
+ left: 50%;
147
+ margin-top: 5px;
148
+ top: 100%;
149
+ transform: translate(-50%, -10px);
150
+ }
151
+
152
+ &:hover {
153
+ &:after {
154
+ transform: translate(-50%, 0);
155
+ }
156
+
157
+ &:before {
158
+ transform: translate(-50%, 0);
159
+ }
160
+ }
161
+ }
162
+
163
+ &[data-placement='bottom-left'] {
164
+ &:after {
165
+ left: 0;
166
+ margin-top: 5px + $tooltip-arrow-height;
167
+ top: 100%;
168
+ transform: translate(0, -10px);
169
+ }
170
+
171
+ &:before {
172
+ @include tooltip-arrow($tooltip-arrow-color, 'down');
173
+
174
+ left: 5px;
175
+ margin-top: 5px;
176
+ top: 100%;
177
+ transform: translate(0, -10px);
178
+ }
179
+
180
+ &:hover {
181
+ &:after {
182
+ transform: translate(0, 0);
183
+ }
184
+
185
+ &:before {
186
+ transform: translate(0, 0);
187
+ }
188
+ }
189
+ }
190
+
191
+ &[data-placement='bottom-right'] {
192
+ &:after {
193
+ right: 0;
194
+ margin-top: 5px + $tooltip-arrow-height;
195
+ top: 100%;
196
+ transform: translate(0, -10px);
197
+ }
198
+
199
+ &:before {
200
+ @include tooltip-arrow($tooltip-arrow-color, 'down');
201
+
202
+ right: 5px;
203
+ margin-top: 5px;
204
+ top: 100%;
205
+ transform: translate(0, -10px);
206
+ }
207
+
208
+ &:hover {
209
+ &:after {
210
+ transform: translate(0, 0);
211
+ }
212
+
213
+ &:before {
214
+ transform: translate(0, 0);
215
+ }
216
+ }
217
+ }
218
+
219
+ &[data-placement='left'] {
220
+ &:after {
221
+ margin-right: 5px + $tooltip-arrow-height;
222
+ right: 100%;
223
+ top: 50%;
224
+ transform: translate(10px, -50%);
225
+ }
226
+
227
+ &:before {
228
+ @include tooltip-arrow($tooltip-arrow-color, 'left');
229
+
230
+ margin-right: 5px;
231
+ right: 100%;
232
+ top: 50%;
233
+ transform: translate(10px, -50%);
234
+ }
235
+
236
+ &:hover {
237
+ &:after {
238
+ transform: translate(0, -50%);
239
+ }
240
+
241
+ &:before {
242
+ transform: translate(0, -50%);
243
+ }
244
+ }
245
+ }
246
+
247
+ &[data-placement='right'] {
248
+ &:after {
249
+ left: 100%;
250
+ margin-left: 5px + $tooltip-arrow-height;
251
+ top: 50%;
252
+ transform: translate(-10px, -50%);
253
+ }
254
+
255
+ &:before {
256
+ @include tooltip-arrow($tooltip-arrow-color, 'right');
257
+
258
+ left: 100%;
259
+ margin-left: 5px;
260
+ top: 50%;
261
+ transform: translate(-10px, -50%);
262
+ }
263
+
264
+ &:hover {
265
+ &:after {
266
+ transform: translate(0, -50%);
267
+ }
268
+
269
+ &:before {
270
+ transform: translate(0, -50%);
271
+ }
272
+ }
273
+ }
274
+ }
@@ -0,0 +1,5 @@
1
+ @import "hootstrap/patterns/card";
2
+ @import "hootstrap/patterns/list-group";
3
+ @import "hootstrap/patterns/navbar";
4
+ @import "hootstrap/patterns/search";
5
+ @import "hootstrap/patterns/toast";
@@ -0,0 +1,8 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .card {
6
+ border: none;
7
+ box-shadow: $card-box-shadow;
8
+ }
@@ -0,0 +1,8 @@
1
+ .list-group-flush-modal > .list-group-item:first-child {
2
+ border-top: 0;
3
+ }
4
+
5
+ .list-group-flush-modal > .list-group-item:last-child {
6
+ border-bottom-left-radius: $border-radius;
7
+ border-bottom-right-radius: $border-radius;
8
+ }
@@ -0,0 +1,3 @@
1
+ .navbar {
2
+ box-shadow: $navbar-box-shadow;
3
+ }
@@ -0,0 +1,45 @@
1
+ .search-group {
2
+ display: flex;
3
+ flex: 100%;
4
+ flex-direction: row;
5
+ flex-wrap: wrap;
6
+ justify-content: flex-start;
7
+
8
+ .search-group-input {
9
+ display: inline-block;
10
+ flex-grow: 1;
11
+ vertical-align: middle;
12
+ width: auto;
13
+ }
14
+
15
+ .search-group-button {
16
+ margin-left: 1rem;
17
+ }
18
+
19
+ @include media-breakpoint-up(lg) {
20
+ .search-group-button {
21
+ min-width: 130px;
22
+ }
23
+ }
24
+
25
+ @include media-breakpoint-down(md) {
26
+ // Display inputs as blocks.
27
+ .search-group-input {
28
+ display: block;
29
+ margin: 0 0 0.5rem !important;
30
+ width: 100%;
31
+ }
32
+
33
+ // Split buttons (submit, clear) into row with each
34
+ // at 50%.
35
+ .search-group-button,
36
+ .btn:not(.search-group-button) {
37
+ flex-grow: 1;
38
+ margin-left: 0 !important;
39
+ }
40
+
41
+ .btn:not(.search-group-button) {
42
+ margin-right: 0.5rem !important;
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,34 @@
1
+ .toast-container {
2
+ position: fixed;
3
+ left: calc(50% - #{$toast-width / 2});
4
+ top: 1rem;
5
+ width: $toast-width;
6
+ z-index: 999999;
7
+
8
+ &[aria-hidden="true"] {
9
+ visibility: hidden;
10
+ }
11
+ }
12
+
13
+ .toast {
14
+ @include border-radius($toast-border-radius);
15
+ border: $toast-border-width solid transparent;
16
+ margin-left: auto;
17
+ margin-right: auto;
18
+ padding: $toast-padding-y $toast-padding-x;
19
+ width: $toast-width;
20
+
21
+ .close {
22
+ margin-left: $spacer / 4;
23
+ }
24
+ }
25
+
26
+ @each $color, $value in $theme-colors {
27
+ .toast-#{$color} {
28
+ @include toast-variant(
29
+ theme-color-level($color, -10),
30
+ theme-color-level($color, -9),
31
+ theme-color-level($color, 6)
32
+ );
33
+ }
34
+ }
@@ -0,0 +1 @@
1
+ @import "hootstrap/reset/html";
@@ -0,0 +1,4 @@
1
+ html {
2
+ position: relative;
3
+ min-height: 100%;
4
+ }
@@ -0,0 +1,3 @@
1
+ @each $color, $value in $theme-colors {
2
+ @include bg-variant-hover(".bg-#{$color}-hover", $value);
3
+ }
@@ -0,0 +1,5 @@
1
+ @import "hootstrap/utils/background";
2
+ @import "hootstrap/utils/flex";
3
+ @import "hootstrap/utils/opacity";
4
+ @import "hootstrap/utils/sizing";
5
+ @import "hootstrap/utils/typography";
@@ -0,0 +1,3 @@
1
+ .flex-grow {
2
+ flex: 1;
3
+ }
@@ -0,0 +1,3 @@
1
+ .o-75 {
2
+ opacity: 0.75;
3
+ }
@@ -0,0 +1,16 @@
1
+ //
2
+ // Sizing at breakpoints
3
+ //
4
+ @each $breakpoint in map-keys($grid-breakpoints) {
5
+ @include media-breakpoint-down($breakpoint) {
6
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
7
+
8
+ @each $prop, $abbrev in (width: w, height: h) {
9
+ @each $size, $length in $sizes {
10
+ .#{$abbrev}#{$infix}-#{$size} {
11
+ #{$prop}: $length !important;
12
+ }
13
+ }
14
+ }
15
+ }
16
+ }