saffron 0.2.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.
- data/.gitignore +5 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +43 -0
- data/MIT +21 -0
- data/README.md +63 -0
- data/Rakefile +16 -0
- data/app/assets/stylesheets/_variables.scss +18 -0
- data/app/assets/stylesheets/entrances/_drop-in.scss +19 -0
- data/app/assets/stylesheets/entrances/_fade-in-down.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-left.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-right.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-up.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-zoom-big.scss +20 -0
- data/app/assets/stylesheets/entrances/_fade-in-zoom.scss +14 -0
- data/app/assets/stylesheets/entrances/_fade-in.scss +13 -0
- data/app/assets/stylesheets/entrances/_newspaper.scss +14 -0
- data/app/assets/stylesheets/entrances/_pop-in.scss +14 -0
- data/app/assets/stylesheets/entrances/_rise-in.scss +13 -0
- data/app/assets/stylesheets/entrances/_slide-in.scss +35 -0
- data/app/assets/stylesheets/entrances/_stretch.scss +33 -0
- data/app/assets/stylesheets/entrances/_turn-in.scss +31 -0
- data/app/assets/stylesheets/exits/_compress.scss +25 -0
- data/app/assets/stylesheets/exits/_drop-out.scss +14 -0
- data/app/assets/stylesheets/exits/_explode.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-down.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-left.scss +13 -0
- data/app/assets/stylesheets/exits/_fade-out-right.scss +13 -0
- data/app/assets/stylesheets/exits/_fade-out-up.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-zoom-big.scss +19 -0
- data/app/assets/stylesheets/exits/_fade-out-zoom.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out.scss +13 -0
- data/app/assets/stylesheets/exits/_poof.scss +17 -0
- data/app/assets/stylesheets/exits/_rise-out.scss +14 -0
- data/app/assets/stylesheets/exits/_slide-out.scss +29 -0
- data/app/assets/stylesheets/exits/_turn-out.scss +33 -0
- data/app/assets/stylesheets/helpers/_animation.scss +3 -0
- data/app/assets/stylesheets/helpers/_contains.scss +4 -0
- data/app/assets/stylesheets/helpers/_keyframes.scss +25 -0
- data/app/assets/stylesheets/helpers/_prefix.scss +39 -0
- data/app/assets/stylesheets/helpers/_transform.scss +9 -0
- data/app/assets/stylesheets/helpers/_transition.scss +7 -0
- data/app/assets/stylesheets/in-place/_around-the-world.scss +12 -0
- data/app/assets/stylesheets/in-place/_bounce.scss +24 -0
- data/app/assets/stylesheets/in-place/_colors.scss +23 -0
- data/app/assets/stylesheets/in-place/_contract.scss +7 -0
- data/app/assets/stylesheets/in-place/_cube-flip.scss +55 -0
- data/app/assets/stylesheets/in-place/_enlarge.scss +7 -0
- data/app/assets/stylesheets/in-place/_expand.scss +6 -0
- data/app/assets/stylesheets/in-place/_flip.scss +19 -0
- data/app/assets/stylesheets/in-place/_float.scss +17 -0
- data/app/assets/stylesheets/in-place/_ping.scss +13 -0
- data/app/assets/stylesheets/in-place/_pulsate.scss +14 -0
- data/app/assets/stylesheets/in-place/_quiver.scss +42 -0
- data/app/assets/stylesheets/in-place/_shake.scss +24 -0
- data/app/assets/stylesheets/in-place/_spin.scss +12 -0
- data/app/assets/stylesheets/in-place/_square-dance.scss +18 -0
- data/app/assets/stylesheets/in-place/_sunrise.scss +12 -0
- data/app/assets/stylesheets/in-place/_sway.scss +17 -0
- data/app/assets/stylesheets/in-place/_teeter.scss +29 -0
- data/app/assets/stylesheets/saffron.scss +62 -0
- data/bin/saffron +9 -0
- data/features/install.feature +28 -0
- data/features/step_definitions/saffron.rb +37 -0
- data/features/support/env.rb +1 -0
- data/features/update.feature +37 -0
- data/features/version.feature +10 -0
- data/lib/saffron.rb +13 -0
- data/lib/saffron/engine.rb +4 -0
- data/lib/saffron/installer.rb +55 -0
- data/lib/saffron/version.rb +3 -0
- data/saffron.gemspec +31 -0
- data/saffron/_variables.scss +18 -0
- data/saffron/entrances/_drop-in.scss +19 -0
- data/saffron/entrances/_fade-in-down.scss +13 -0
- data/saffron/entrances/_fade-in-left.scss +13 -0
- data/saffron/entrances/_fade-in-right.scss +13 -0
- data/saffron/entrances/_fade-in-up.scss +13 -0
- data/saffron/entrances/_fade-in-zoom-big.scss +20 -0
- data/saffron/entrances/_fade-in-zoom.scss +14 -0
- data/saffron/entrances/_fade-in.scss +13 -0
- data/saffron/entrances/_newspaper.scss +14 -0
- data/saffron/entrances/_pop-in.scss +14 -0
- data/saffron/entrances/_rise-in.scss +13 -0
- data/saffron/entrances/_slide-in.scss +35 -0
- data/saffron/entrances/_stretch.scss +33 -0
- data/saffron/entrances/_turn-in.scss +31 -0
- data/saffron/exits/_compress.scss +25 -0
- data/saffron/exits/_drop-out.scss +14 -0
- data/saffron/exits/_explode.scss +14 -0
- data/saffron/exits/_fade-out-down.scss +14 -0
- data/saffron/exits/_fade-out-left.scss +13 -0
- data/saffron/exits/_fade-out-right.scss +13 -0
- data/saffron/exits/_fade-out-up.scss +14 -0
- data/saffron/exits/_fade-out-zoom-big.scss +19 -0
- data/saffron/exits/_fade-out-zoom.scss +14 -0
- data/saffron/exits/_fade-out.scss +13 -0
- data/saffron/exits/_poof.scss +17 -0
- data/saffron/exits/_rise-out.scss +14 -0
- data/saffron/exits/_slide-out.scss +29 -0
- data/saffron/exits/_turn-out.scss +33 -0
- data/saffron/helpers/_animation.scss +3 -0
- data/saffron/helpers/_contains.scss +4 -0
- data/saffron/helpers/_keyframes.scss +25 -0
- data/saffron/helpers/_prefix.scss +39 -0
- data/saffron/helpers/_transform.scss +9 -0
- data/saffron/helpers/_transition.scss +7 -0
- data/saffron/in-place/_around-the-world.scss +12 -0
- data/saffron/in-place/_bounce.scss +24 -0
- data/saffron/in-place/_colors.scss +23 -0
- data/saffron/in-place/_contract.scss +7 -0
- data/saffron/in-place/_cube-flip.scss +55 -0
- data/saffron/in-place/_enlarge.scss +7 -0
- data/saffron/in-place/_expand.scss +6 -0
- data/saffron/in-place/_flip.scss +19 -0
- data/saffron/in-place/_float.scss +17 -0
- data/saffron/in-place/_ping.scss +13 -0
- data/saffron/in-place/_pulsate.scss +14 -0
- data/saffron/in-place/_quiver.scss +42 -0
- data/saffron/in-place/_shake.scss +24 -0
- data/saffron/in-place/_spin.scss +12 -0
- data/saffron/in-place/_square-dance.scss +18 -0
- data/saffron/in-place/_sunrise.scss +12 -0
- data/saffron/in-place/_sway.scss +17 -0
- data/saffron/in-place/_teeter.scss +29 -0
- data/saffron/saffron.scss +62 -0
- data/tasks/.csscomb.json +297 -0
- data/tasks/.csslintrc +19 -0
- data/tasks/Gruntfile.js +111 -0
- data/tasks/compiled/index.html +11 -0
- data/tasks/compiled/saffron.css +3049 -0
- data/tasks/compiled/test.css +3086 -0
- data/tasks/package.json +32 -0
- data/tasks/test.scss +13 -0
- metadata +278 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
@mixin enlarge($selector: ":hover", $duration: 0.5s, $delay: 0s, $timing: cubic-bezier(1.000, -0.600, 0.595, 0.835)) {
|
|
2
|
+
@include transition(all $duration $delay $timing);
|
|
3
|
+
@include transform(translateY(0) scale(1) translateZ(0));
|
|
4
|
+
&#{$selector} {
|
|
5
|
+
@include transform(translateY($enlarge-contract-jump * -1) scale($enlarge-contract-multiple));
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
@mixin expand($direction, $amount: 1em, $selector: ":hover", $duration: 0.5s, $delay: 0s, $timing: cubic-bezier(0.680, -0.550, 0.275, 1.465)) {
|
|
2
|
+
@include transition(padding-#{$direction} $duration $delay $timing);
|
|
3
|
+
&#{$selector} {
|
|
4
|
+
padding-#{$direction}: $amount;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@mixin flip($selector: ".flipped", $duration: 0.5s, $delay: 0s, $fill-mode: both, $count: 1, $timing: ease-in) {
|
|
2
|
+
position: relative;
|
|
3
|
+
@include prefix(transform-style, preserve-3d, webkit spec);
|
|
4
|
+
@include transition(all $duration $delay $timing);
|
|
5
|
+
@include prefix(backface-visibility, hidden, webkit moz spec);
|
|
6
|
+
&#{$selector} {
|
|
7
|
+
@include transform(rotateY(180deg)translateZ(0));
|
|
8
|
+
}
|
|
9
|
+
&::after {
|
|
10
|
+
content: '';
|
|
11
|
+
position: absolute;
|
|
12
|
+
left: 0;
|
|
13
|
+
height: 100%;
|
|
14
|
+
width: 100%;
|
|
15
|
+
@include prefix(backface-visibility, inherit, webkit moz spec);
|
|
16
|
+
@include transform(rotateY(180deg));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@include keyframes(float) {
|
|
2
|
+
0%, 50%, 100% {
|
|
3
|
+
@include transform(translateY($float-bob-distance * -1) translateZ(0));
|
|
4
|
+
}
|
|
5
|
+
25% {
|
|
6
|
+
@include transform(translateY($float-bob-distance) rotate($float-bob-angle));
|
|
7
|
+
}
|
|
8
|
+
75% {
|
|
9
|
+
@include transform(translateY($float-bob-distance) rotate($float-bob-angle * -1));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@mixin float($duration: 5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
|
14
|
+
// hack to fix jagged edges
|
|
15
|
+
outline: 1px solid transparent;
|
|
16
|
+
@include animation(float $count $duration $delay $fill-mode $timing);
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@include keyframes(ping) {
|
|
2
|
+
0% {
|
|
3
|
+
@include transform(scale(0));
|
|
4
|
+
}
|
|
5
|
+
100% {
|
|
6
|
+
@include transform(scale(1));
|
|
7
|
+
opacity: 0;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@mixin ping($duration: 1.5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
|
12
|
+
@include animation(ping $count $duration $delay $fill-mode $timing);
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@include keyframes(pulsate) {
|
|
2
|
+
0%, 100% {
|
|
3
|
+
opacity: 1;
|
|
4
|
+
@include transform(scale(1) translateZ(0));
|
|
5
|
+
}
|
|
6
|
+
50% {
|
|
7
|
+
opacity: 0.85;
|
|
8
|
+
@include transform(scale($pulsate-scale));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@mixin pulsate($duration: 1.5s, $delay: 0s, $fill-mode: none, $count: 3) {
|
|
13
|
+
@include animation(pulsate $count $duration $delay $fill-mode);
|
|
14
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@include keyframes(quiver) {
|
|
2
|
+
0%{
|
|
3
|
+
@include transform(translate3d(2px, 1px, 0) rotate(0deg));
|
|
4
|
+
}
|
|
5
|
+
10% {
|
|
6
|
+
@include transform(translate3d(-1px, 2px, 0) rotate($quiver-angle));
|
|
7
|
+
}
|
|
8
|
+
20% {
|
|
9
|
+
@include transform(translate3d(-3px, 0) rotate($quiver-angle * -1));
|
|
10
|
+
}
|
|
11
|
+
30% {
|
|
12
|
+
@include transform(translate3d(0, 2px, 0) rotate(0deg));
|
|
13
|
+
}
|
|
14
|
+
40% {
|
|
15
|
+
@include transform(translate3d(1px, -1px, 0) rotate($quiver-angle));
|
|
16
|
+
}
|
|
17
|
+
50% {
|
|
18
|
+
@include transform(translate3d(-1px, 2px, 0) rotate($quiver-angle * -1));
|
|
19
|
+
}
|
|
20
|
+
60% {
|
|
21
|
+
@include transform(translate3d(-3px, 1px, 0) rotate(0deg));
|
|
22
|
+
}
|
|
23
|
+
70% {
|
|
24
|
+
@include transform(translate3d(2px, 1px, 0) rotate($quiver-angle));
|
|
25
|
+
}
|
|
26
|
+
80% {
|
|
27
|
+
@include transform(translate3d(-1px, -1px, 0) rotate($quiver-angle * -1));
|
|
28
|
+
}
|
|
29
|
+
90% {
|
|
30
|
+
@include transform(translate3d(2px, 2px, 0) rotate(0deg));
|
|
31
|
+
}
|
|
32
|
+
100% {
|
|
33
|
+
@include transform(translate3d(1px, -2px, 0) rotate($quiver-angle));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@mixin quiver($duration: 0.75s, $delay: 0s, $fill-mode: none, $count: infinite) {
|
|
39
|
+
// hack to fix jagged edges
|
|
40
|
+
outline: 1px solid transparent;
|
|
41
|
+
@include animation(quiver $duration $delay $fill-mode $count);
|
|
42
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@include keyframes(shake) {
|
|
2
|
+
0%, 100% {
|
|
3
|
+
@include transform(translateX(0) translateZ(0));
|
|
4
|
+
}
|
|
5
|
+
15% {
|
|
6
|
+
@include transform(translateX($shake-distance));
|
|
7
|
+
}
|
|
8
|
+
35% {
|
|
9
|
+
@include transform(translateX($shake-distance * -1));
|
|
10
|
+
}
|
|
11
|
+
50% {
|
|
12
|
+
@include transform(translateX($shake-distance / 2));
|
|
13
|
+
}
|
|
14
|
+
65% {
|
|
15
|
+
@include transform(translateX($shake-distance / 2 * -1));
|
|
16
|
+
}
|
|
17
|
+
85% {
|
|
18
|
+
@include transform(translateX($shake-distance / 3));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@mixin shake($duration: 0.5s, $delay: 0s, $fill-mode: none, $count: 1) {
|
|
23
|
+
@include animation(shake $duration $delay $fill-mode $count);
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@include keyframes(spin) {
|
|
2
|
+
0% {
|
|
3
|
+
@include transform(rotate(0deg) translateZ(0));
|
|
4
|
+
}
|
|
5
|
+
100% {
|
|
6
|
+
@include transform(rotate(360deg));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@mixin spin($duration: 0.5s, $delay: 0s, $fill-mode: none, $count: 1, $timing: ease-in-out) {
|
|
11
|
+
@include animation(spin $count $duration $delay $fill-mode $timing);
|
|
12
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@include keyframes(squareDance) {
|
|
2
|
+
0%, 100% {
|
|
3
|
+
@include transform(translate3d(100%, 0, 0));
|
|
4
|
+
}
|
|
5
|
+
25% {
|
|
6
|
+
@include transform(translate3d(100%, 100%, 0));
|
|
7
|
+
}
|
|
8
|
+
50% {
|
|
9
|
+
@include transform(translate3d(0, 100%, 0));
|
|
10
|
+
}
|
|
11
|
+
75% {
|
|
12
|
+
@include transform(translate3d(0, 0, 0));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@mixin squareDance($duration: 3s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
|
17
|
+
@include animation(squareDance $count $duration $delay $fill-mode $timing);
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@include keyframes(sunrise) {
|
|
2
|
+
0% {
|
|
3
|
+
@include transform(rotate(0deg) translate($sunrise-arch) rotate(0deg));
|
|
4
|
+
}
|
|
5
|
+
100% {
|
|
6
|
+
@include transform(rotate(180deg) translate($sunrise-arch) rotate(-180deg));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@mixin sunrise($duration: 4s, $delay: 0s, $fill-mode: both, $count: 1, $timing: ease-in-out) {
|
|
11
|
+
@include animation(sunrise $count $duration $delay $fill-mode $timing);
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@include keyframes(sway) {
|
|
2
|
+
0%, 50%, 100% {
|
|
3
|
+
@include transform(rotate($sway-angle) translateZ(0));
|
|
4
|
+
}
|
|
5
|
+
25% {
|
|
6
|
+
@include transform(rotate($sway-angle * -1));
|
|
7
|
+
}
|
|
8
|
+
75% {
|
|
9
|
+
@include transform(rotate($sway-angle * -1));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@mixin sway($duration: 6.5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
|
14
|
+
// hack to fix jagged edges
|
|
15
|
+
outline: 1px solid transparent;
|
|
16
|
+
@include animation(sway $count $duration $delay $fill-mode $timing);
|
|
17
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@include keyframes(teeter) {
|
|
2
|
+
0%, 100% {
|
|
3
|
+
@include transform(rotate(0deg) translateZ(0));
|
|
4
|
+
}
|
|
5
|
+
15% {
|
|
6
|
+
@include transform(rotate($teeter-angle));
|
|
7
|
+
}
|
|
8
|
+
30% {
|
|
9
|
+
@include transform(rotate($teeter-angle * -1));
|
|
10
|
+
}
|
|
11
|
+
45% {
|
|
12
|
+
@include transform(rotate($teeter-angle / 2));
|
|
13
|
+
}
|
|
14
|
+
60% {
|
|
15
|
+
@include transform(rotate($teeter-angle / 2 * -1));
|
|
16
|
+
}
|
|
17
|
+
73% {
|
|
18
|
+
@include transform(rotate($teeter-angle / 3));
|
|
19
|
+
}
|
|
20
|
+
86% {
|
|
21
|
+
@include transform(rotate($teeter-angle / 3 * -1));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@mixin teeter($duration: 1s, $delay: 0s, $fill-mode: none, $count: 1) {
|
|
26
|
+
// hack to fix jagged edges
|
|
27
|
+
outline: 1px solid transparent;
|
|
28
|
+
@include animation(teeter $duration $delay $fill-mode $count);
|
|
29
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Variables
|
|
2
|
+
@import "variables";
|
|
3
|
+
|
|
4
|
+
// Helper Mixins and Functions
|
|
5
|
+
@import "helpers/contains";
|
|
6
|
+
@import "helpers/prefix";
|
|
7
|
+
@import "helpers/animation";
|
|
8
|
+
@import "helpers/transition";
|
|
9
|
+
@import "helpers/transform";
|
|
10
|
+
@import "helpers/keyframes";
|
|
11
|
+
|
|
12
|
+
// Entrances
|
|
13
|
+
@import "entrances/fade-in";
|
|
14
|
+
@import "entrances/fade-in-up";
|
|
15
|
+
@import "entrances/fade-in-down";
|
|
16
|
+
@import "entrances/fade-in-left";
|
|
17
|
+
@import "entrances/fade-in-right";
|
|
18
|
+
@import "entrances/fade-in-zoom";
|
|
19
|
+
@import "entrances/fade-in-zoom-big";
|
|
20
|
+
@import "entrances/slide-in";
|
|
21
|
+
@import "entrances/drop-in";
|
|
22
|
+
@import "entrances/rise-in";
|
|
23
|
+
@import "entrances/pop-in";
|
|
24
|
+
@import "entrances/turn-in";
|
|
25
|
+
@import "entrances/stretch";
|
|
26
|
+
@import "entrances/newspaper";
|
|
27
|
+
|
|
28
|
+
// Exits
|
|
29
|
+
@import "exits/fade-out";
|
|
30
|
+
@import "exits/fade-out-down";
|
|
31
|
+
@import "exits/fade-out-up";
|
|
32
|
+
@import "exits/fade-out-left";
|
|
33
|
+
@import "exits/fade-out-right";
|
|
34
|
+
@import "exits/fade-out-zoom";
|
|
35
|
+
@import "exits/fade-out-zoom-big";
|
|
36
|
+
@import "exits/slide-out";
|
|
37
|
+
@import "exits/explode";
|
|
38
|
+
@import "exits/drop-out";
|
|
39
|
+
@import "exits/rise-out";
|
|
40
|
+
@import "exits/poof";
|
|
41
|
+
@import "exits/turn-out";
|
|
42
|
+
@import "exits/compress";
|
|
43
|
+
|
|
44
|
+
// In Place
|
|
45
|
+
@import "in-place/float";
|
|
46
|
+
@import "in-place/shake";
|
|
47
|
+
@import "in-place/expand";
|
|
48
|
+
@import "in-place/teeter";
|
|
49
|
+
@import "in-place/quiver";
|
|
50
|
+
@import "in-place/sway";
|
|
51
|
+
@import "in-place/spin";
|
|
52
|
+
@import "in-place/bounce";
|
|
53
|
+
@import "in-place/pulsate";
|
|
54
|
+
@import "in-place/colors";
|
|
55
|
+
@import "in-place/around-the-world";
|
|
56
|
+
@import "in-place/ping";
|
|
57
|
+
@import "in-place/square-dance";
|
|
58
|
+
@import "in-place/sunrise";
|
|
59
|
+
@import "in-place/enlarge";
|
|
60
|
+
@import "in-place/contract";
|
|
61
|
+
@import "in-place/flip";
|
|
62
|
+
@import "in-place/cube-flip";
|
data/bin/saffron
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@disable-bundler
|
|
2
|
+
Feature: Install saffron
|
|
3
|
+
As a user
|
|
4
|
+
I want to easily generate the Saffron files and directories
|
|
5
|
+
So I can use them in my project
|
|
6
|
+
|
|
7
|
+
Scenario: Installing Saffron by default
|
|
8
|
+
When I run `bundle exec saffron install`
|
|
9
|
+
Then the output should contain "Saffron succesfully installed in saffron/"
|
|
10
|
+
And a directory named "saffron" should exist
|
|
11
|
+
And the sub directories should exist inside "saffron/"
|
|
12
|
+
And the following files should exist:
|
|
13
|
+
| saffron/saffron.scss |
|
|
14
|
+
| saffron/_variables.scss |
|
|
15
|
+
|
|
16
|
+
Scenario: Installing Saffron into a specific directory
|
|
17
|
+
When I run `bundle exec saffron install -p path/to/directory`
|
|
18
|
+
Then the output should contain "Saffron succesfully installed in path/to/directory/saffron"
|
|
19
|
+
And a directory named "path/to/directory/saffron" should exist
|
|
20
|
+
And the sub directories should exist inside "path/to/directory/saffron/"
|
|
21
|
+
And the following files should exist:
|
|
22
|
+
| path/to/directory/saffron/saffron.scss |
|
|
23
|
+
| path/to/directory/saffron/_variables.scss |
|
|
24
|
+
|
|
25
|
+
Scenario: Saffron is already installed
|
|
26
|
+
When I run `bundle exec saffron install`
|
|
27
|
+
And I run `bundle exec saffron install`
|
|
28
|
+
Then the output should contain "Saffron already exists"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Then(/^the output should contain the current version number$/) do
|
|
2
|
+
assert_partial_output Saffron::VERSION, all_output
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then(/^the sub directories should exist inside "(.*?)"$/) do |directory|
|
|
6
|
+
sub_dirs = %w{entrances exits helpers in-place}.map do |sub_dir|
|
|
7
|
+
"#{directory}#{sub_dir}"
|
|
8
|
+
end
|
|
9
|
+
check_directory_presence sub_dirs, true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
Given(/^Saffron already exists$/) do
|
|
13
|
+
run_simple "bundle exec saffron install"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
When(/^I modify saffron at "(.*?)" with "(.*?)"$/) do |path, mod|
|
|
17
|
+
append_to_file "#{path}/saffron.scss", mod
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Given(/^Saffron was installed into a specific directory$/) do
|
|
21
|
+
run_simple "bundle exec saffron install -p path/to/directory"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Then(/^saffron at "(.*?)" should still be modified with "(.*?)"$/) do |path, mod|
|
|
25
|
+
run_simple "cat #{path}/saffron.scss"
|
|
26
|
+
assert_partial_output mod, all_output
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Then(/^saffron at "(.*?)" should no longer contain "(.*?)"$/) do |path, mod|
|
|
30
|
+
run_simple "cat #{path}/saffron.scss"
|
|
31
|
+
assert_no_partial_output mod, all_output
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Given(/^Saffron does not yet exist$/) do
|
|
35
|
+
check_directory_presence(["saffron/"], false)
|
|
36
|
+
end
|
|
37
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'aruba/cucumber'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@disable-bundler
|
|
2
|
+
Feature: Update saffron
|
|
3
|
+
As a user
|
|
4
|
+
I want to easily update my Saffron files
|
|
5
|
+
So I can maintain the most up-to-date functionality
|
|
6
|
+
|
|
7
|
+
Scenario: Updating Saffron at the default directory
|
|
8
|
+
Given Saffron does not yet exist
|
|
9
|
+
When I run `bundle exec saffron update`
|
|
10
|
+
Then the output should contain "Saffron not found. No updates occured."
|
|
11
|
+
And a directory named "saffron/" should not exist
|
|
12
|
+
And a file named "saffron/saffron.scss" should not exist
|
|
13
|
+
|
|
14
|
+
Given Saffron already exists
|
|
15
|
+
When I modify saffron at "saffron/" with "modification text"
|
|
16
|
+
And I run `bundle exec saffron update`
|
|
17
|
+
Then the output should contain "Saffron succesfully updated in saffron/"
|
|
18
|
+
And a directory named "saffron" should exist
|
|
19
|
+
And the sub directories should exist inside "saffron/"
|
|
20
|
+
And the following files should exist:
|
|
21
|
+
| saffron/saffron.scss |
|
|
22
|
+
| saffron/_variables.scss |
|
|
23
|
+
And saffron at "saffron/" should no longer contain "modification text"
|
|
24
|
+
|
|
25
|
+
Scenario: Updating Saffron at a specific directory
|
|
26
|
+
Given Saffron was installed into a specific directory
|
|
27
|
+
When I modify saffron at "path/to/directory/saffron/" with "modification text"
|
|
28
|
+
And I run `bundle exec saffron update`
|
|
29
|
+
Then saffron at "path/to/directory/saffron/" should still be modified with "modification text"
|
|
30
|
+
And the output should contain "Saffron not found. No updates occured."
|
|
31
|
+
And I run `bundle exec saffron update -p path/to/directory`
|
|
32
|
+
Then the output should contain "Saffron succesfully updated in path/to/directory/saffron"
|
|
33
|
+
And a directory named "path/to/directory/saffron" should exist
|
|
34
|
+
And the sub directories should exist inside "path/to/directory/saffron/"
|
|
35
|
+
And the following files should exist:
|
|
36
|
+
| path/to/directory/saffron/saffron.scss |
|
|
37
|
+
| path/to/directory/saffron/_variables.scss |
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
@disable-bundler
|
|
2
|
+
Feature: Output version
|
|
3
|
+
As a user
|
|
4
|
+
I want to know the current version of Saffron I have installed
|
|
5
|
+
So I can keep it up to date
|
|
6
|
+
|
|
7
|
+
Scenario: Viewing the current version of Saffron
|
|
8
|
+
When I run `bundle exec saffron version`
|
|
9
|
+
Then the output should contain the current version number
|
|
10
|
+
|