bookends 0.6.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/README.md +28 -24
  4. data/Rakefile +7 -3
  5. data/bin/bookends +5 -0
  6. data/bookends.gemspec +5 -2
  7. data/fixtures/dummy-jekyll/README.md +64 -0
  8. data/fixtures/dummy-jekyll/_config.yml +8 -0
  9. data/fixtures/dummy-jekyll/_layouts/default.html +118 -0
  10. data/fixtures/dummy-jekyll/_layouts/post.html +14 -0
  11. data/fixtures/dummy-jekyll/_sass/_base.scss +478 -0
  12. data/fixtures/dummy-jekyll/_sass/_google-cse.scss +372 -0
  13. data/fixtures/dummy-jekyll/_sass/_header.scss +780 -0
  14. data/fixtures/dummy-jekyll/_sass/_legacy.scss +567 -0
  15. data/fixtures/dummy-jekyll/_sass/_menu-icon.scss +68 -0
  16. data/fixtures/dummy-jekyll/_sass/_mixins.scss +12 -0
  17. data/fixtures/dummy-jekyll/_sass/_search.scss +51 -0
  18. data/{lib/generators/bookends/install/templates/footer.scss → fixtures/dummy-jekyll/_sass/bookends/_footer.scss} +0 -0
  19. data/fixtures/dummy-jekyll/_sass/mixins/_background-image.scss +48 -0
  20. data/fixtures/dummy-jekyll/_sass/mixins/_border-radius.scss +22 -0
  21. data/fixtures/dummy-jekyll/_sass/mixins/_box-sizing.scss +4 -0
  22. data/fixtures/dummy-jekyll/_sass/mixins/_hide-text.scss +5 -0
  23. data/fixtures/dummy-jekyll/_sass/mixins/_hidpi.scss +10 -0
  24. data/fixtures/dummy-jekyll/_sass/mixins/_linear-gradient.scss +41 -0
  25. data/fixtures/dummy-jekyll/_sass/mixins/_prefixer.scss +49 -0
  26. data/fixtures/dummy-jekyll/_sass/mixins/_responsiveness.scss +129 -0
  27. data/fixtures/dummy-jekyll/_sass/mixins/_retina-image.scss +31 -0
  28. data/fixtures/dummy-jekyll/_sass/mixins/_size.scss +44 -0
  29. data/fixtures/dummy-jekyll/_sass/mixins/_transition.scss +34 -0
  30. data/fixtures/dummy-jekyll/_sass/mixins/_triangle.scss +45 -0
  31. data/fixtures/dummy-jekyll/app.json +15 -0
  32. data/fixtures/dummy-jekyll/bin/from-gdoc +3 -0
  33. data/fixtures/dummy-jekyll/bin/platform-setup +15 -0
  34. data/fixtures/dummy-jekyll/feed.xml +34 -0
  35. data/fixtures/dummy-jekyll/index.html +40 -0
  36. data/fixtures/dummy-jekyll/static.json +3 -0
  37. data/fixtures/dummy-rails/README.md +9 -0
  38. data/fixtures/dummy-rails/Rakefile +6 -0
  39. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-book.eot +0 -0
  40. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-book.svg +400 -0
  41. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-book.ttf +0 -0
  42. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-book.woff +0 -0
  43. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-medium.eot +0 -0
  44. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-medium.svg +416 -0
  45. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-medium.ttf +0 -0
  46. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-medium.woff +0 -0
  47. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-regular.eot +0 -0
  48. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-regular.svg +416 -0
  49. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-regular.ttf +0 -0
  50. data/fixtures/dummy-rails/app/assets/fonts/bentonsans-regular.woff +0 -0
  51. data/fixtures/dummy-rails/app/assets/images/.keep +0 -0
  52. data/{lib/generators/bookends/install/templates/footer_images → fixtures/dummy-rails/app/assets/images/bookends/footer}/footer_sprite.png +0 -0
  53. data/{lib/generators/bookends/install/templates/footer_images → fixtures/dummy-rails/app/assets/images/bookends/footer}/footer_sprite@2x.png +0 -0
  54. data/{lib/generators/bookends/install/templates/footer_images → fixtures/dummy-rails/app/assets/images/bookends/footer}/salesforce_heroku_gray.png +0 -0
  55. data/fixtures/dummy-rails/app/assets/javascripts/application.js +15 -0
  56. data/fixtures/dummy-rails/app/assets/stylesheets/application.css.scss +11 -0
  57. data/fixtures/dummy-rails/app/controllers/application_controller.rb +5 -0
  58. data/fixtures/dummy-rails/app/controllers/concerns/.keep +0 -0
  59. data/fixtures/dummy-rails/app/controllers/pages_controller.rb +5 -0
  60. data/fixtures/dummy-rails/app/helpers/application_helper.rb +2 -0
  61. data/fixtures/dummy-rails/app/mailers/.keep +0 -0
  62. data/fixtures/dummy-rails/app/models/.keep +0 -0
  63. data/fixtures/dummy-rails/app/models/concerns/.keep +0 -0
  64. data/fixtures/dummy-rails/app/views/layouts/application.html.erb +16 -0
  65. data/fixtures/dummy-rails/app/views/pages/home.html.erb +1 -0
  66. data/fixtures/dummy-rails/bin/bundle +3 -0
  67. data/fixtures/dummy-rails/bin/rails +4 -0
  68. data/fixtures/dummy-rails/bin/rake +4 -0
  69. data/fixtures/dummy-rails/bin/setup +29 -0
  70. data/fixtures/dummy-rails/config/application.rb +34 -0
  71. data/fixtures/dummy-rails/config/boot.rb +5 -0
  72. data/fixtures/dummy-rails/config/database.yml +25 -0
  73. data/fixtures/dummy-rails/config/environment.rb +5 -0
  74. data/fixtures/dummy-rails/config/environments/development.rb +41 -0
  75. data/fixtures/dummy-rails/config/environments/production.rb +79 -0
  76. data/fixtures/dummy-rails/config/environments/test.rb +42 -0
  77. data/fixtures/dummy-rails/config/initializers/assets.rb +11 -0
  78. data/fixtures/dummy-rails/config/initializers/backtrace_silencers.rb +7 -0
  79. data/fixtures/dummy-rails/config/initializers/cookies_serializer.rb +3 -0
  80. data/fixtures/dummy-rails/config/initializers/filter_parameter_logging.rb +4 -0
  81. data/fixtures/dummy-rails/config/initializers/inflections.rb +16 -0
  82. data/fixtures/dummy-rails/config/initializers/mime_types.rb +4 -0
  83. data/fixtures/dummy-rails/config/initializers/session_store.rb +3 -0
  84. data/fixtures/dummy-rails/config/initializers/wrap_parameters.rb +14 -0
  85. data/fixtures/dummy-rails/config/locales/en.yml +23 -0
  86. data/fixtures/dummy-rails/config/routes.rb +6 -0
  87. data/fixtures/dummy-rails/config/secrets.yml +22 -0
  88. data/fixtures/dummy-rails/config.ru +4 -0
  89. data/fixtures/dummy-rails/db/development.sqlite3 +0 -0
  90. data/fixtures/dummy-rails/lib/assets/.keep +0 -0
  91. data/fixtures/dummy-rails/log/.keep +0 -0
  92. data/fixtures/dummy-rails/log/development.log +1893 -0
  93. data/fixtures/dummy-rails/public/404.html +67 -0
  94. data/fixtures/dummy-rails/public/422.html +67 -0
  95. data/fixtures/dummy-rails/public/500.html +66 -0
  96. data/fixtures/dummy-rails/public/favicon.ico +0 -0
  97. data/lib/bookends/cli.rb +88 -0
  98. data/lib/bookends/config/framework.rb +24 -0
  99. data/lib/bookends/config/turbolinks.rb +18 -0
  100. data/lib/bookends/file_actions.rb +13 -0
  101. data/lib/bookends/jekyll_handler.rb +21 -0
  102. data/lib/bookends/rails_handler.rb +30 -0
  103. data/lib/{generators/bookends/install/templates/footer.html.erb → bookends/templates/footer.html} +18 -18
  104. data/lib/bookends/templates/footer.scss +403 -0
  105. data/lib/bookends/templates/footer_images/footer_sprite.png +0 -0
  106. data/lib/bookends/templates/footer_images/footer_sprite@2x.png +0 -0
  107. data/lib/bookends/templates/footer_images/salesforce.png +0 -0
  108. data/lib/bookends/templates/newsletter-init-turbolinks.js +6 -0
  109. data/lib/bookends/templates/newsletter-init.js +6 -0
  110. data/lib/{generators/bookends/install → bookends}/templates/newsletter.js +0 -4
  111. data/lib/bookends/version.rb +1 -1
  112. data/lib/bookends.rb +1 -1
  113. metadata +138 -11
  114. data/lib/generators/bookends/install/install_generator.rb +0 -21
@@ -0,0 +1,48 @@
1
+ //************************************************************************//
2
+ // Background-image property for adding multiple background images with
3
+ // gradients, or for stringing multiple gradients together.
4
+ //************************************************************************//
5
+
6
+ @mixin background-image($images...) {
7
+ background-image: _add-prefix($images, webkit);
8
+ background-image: _add-prefix($images);
9
+ }
10
+
11
+ @function _add-prefix($images, $vendor: false) {
12
+ $images-prefixed: ();
13
+ $gradient-positions: false;
14
+ @for $i from 1 through length($images) {
15
+ $type: type-of(nth($images, $i)); // Get type of variable - List or String
16
+
17
+ // If variable is a list - Gradient
18
+ @if $type == list {
19
+ $gradient-type: nth(nth($images, $i), 1); // linear or radial
20
+ $gradient-pos: null;
21
+ $gradient-args: null;
22
+
23
+ @if ($gradient-type == linear) or ($gradient-type == radial) {
24
+ $gradient-pos: nth(nth($images, $i), 2); // Get gradient position
25
+ $gradient-args: nth(nth($images, $i), 3); // Get actual gradient (red, blue)
26
+ }
27
+ @else {
28
+ $gradient-args: nth(nth($images, $i), 2); // Get actual gradient (red, blue)
29
+ }
30
+
31
+ $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
32
+ $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
33
+ $images-prefixed: append($images-prefixed, $gradient, comma);
34
+ }
35
+ // If variable is a string - Image
36
+ @else if $type == string {
37
+ $images-prefixed: join($images-prefixed, nth($images, $i), comma);
38
+ }
39
+ }
40
+ @return $images-prefixed;
41
+ }
42
+
43
+ //Examples:
44
+ //@include background-image(linear-gradient(top, orange, red));
45
+ //@include background-image(radial-gradient(50% 50%, cover circle, orange, red));
46
+ //@include background-image(url("/images/a.png"), linear-gradient(orange, red));
47
+ //@include background-image(url("image.png"), linear-gradient(orange, red), url("image.png"));
48
+ //@include background-image(linear-gradient(hsla(0, 100%, 100%, 0.25) 0%, hsla(0, 100%, 100%, 0.08) 50%, transparent 50%), linear-gradient(orange, red));
@@ -0,0 +1,22 @@
1
+ //************************************************************************//
2
+ // Shorthand Border-radius mixins
3
+ //************************************************************************//
4
+ @mixin border-top-radius($radii) {
5
+ @include prefixer(border-top-left-radius, $radii, spec);
6
+ @include prefixer(border-top-right-radius, $radii, spec);
7
+ }
8
+
9
+ @mixin border-bottom-radius($radii) {
10
+ @include prefixer(border-bottom-left-radius, $radii, spec);
11
+ @include prefixer(border-bottom-right-radius, $radii, spec);
12
+ }
13
+
14
+ @mixin border-left-radius($radii) {
15
+ @include prefixer(border-top-left-radius, $radii, spec);
16
+ @include prefixer(border-bottom-left-radius, $radii, spec);
17
+ }
18
+
19
+ @mixin border-right-radius($radii) {
20
+ @include prefixer(border-top-right-radius, $radii, spec);
21
+ @include prefixer(border-bottom-right-radius, $radii, spec);
22
+ }
@@ -0,0 +1,4 @@
1
+ @mixin box-sizing ($box) {
2
+ // content-box | border-box | inherit
3
+ @include prefixer(box-sizing, $box, webkit moz spec);
4
+ }
@@ -0,0 +1,5 @@
1
+ @mixin hide-text {
2
+ color: transparent;
3
+ font: 0/0 a;
4
+ text-shadow: none;
5
+ }
@@ -0,0 +1,10 @@
1
+ // HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/)
2
+ @mixin hidpi($ratio: 1.3) {
3
+ @media only screen and (-webkit-min-device-pixel-ratio: $ratio),
4
+ only screen and (min--moz-device-pixel-ratio: $ratio),
5
+ only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
6
+ only screen and (min-resolution: #{round($ratio*96)}dpi),
7
+ only screen and (min-resolution: #{$ratio}dppx) {
8
+ @content;
9
+ }
10
+ }
@@ -0,0 +1,41 @@
1
+ @mixin linear-gradient($pos, $G1, $G2: false,
2
+ $G3: false, $G4: false,
3
+ $G5: false, $G6: false,
4
+ $G7: false, $G8: false,
5
+ $G9: false, $G10: false,
6
+ $deprecated-pos1: left top,
7
+ $deprecated-pos2: left bottom,
8
+ $fallback: false) {
9
+ // Detect what type of value exists in $pos
10
+ $pos-type: type-of(nth($pos, 1));
11
+ $pos-spec: null;
12
+ $pos-degree: null;
13
+
14
+ // If $pos is missing from mixin, reassign vars and add default position
15
+ @if ($pos-type == color) or (nth($pos, 1) == "transparent") {
16
+ $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
17
+ $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
18
+ $pos: null;
19
+ }
20
+
21
+ @if $pos {
22
+ $positions: _linear-positions-parser($pos);
23
+ $pos-degree: nth($positions, 1);
24
+ $pos-spec: nth($positions, 2);
25
+ }
26
+
27
+ $full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10);
28
+
29
+ // Set $G1 as the default fallback color
30
+ $fallback-color: nth($G1, 1);
31
+
32
+ // If $fallback is a color use that color as the fallback color
33
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
34
+ $fallback-color: $fallback;
35
+ }
36
+
37
+ background-color: $fallback-color;
38
+ background-image: _deprecated-webkit-gradient(linear, $deprecated-pos1, $deprecated-pos2, $full); // Safari <= 5.0
39
+ background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome
40
+ background-image: unquote("linear-gradient(#{$pos-spec}#{$full})");
41
+ }
@@ -0,0 +1,49 @@
1
+ //************************************************************************//
2
+ // Example: @include prefixer(border-radius, $radii, webkit ms spec);
3
+ //************************************************************************//
4
+ $prefix-for-webkit: true !default;
5
+ $prefix-for-mozilla: true !default;
6
+ $prefix-for-microsoft: true !default;
7
+ $prefix-for-opera: true !default;
8
+ $prefix-for-spec: true !default; // required for keyframe mixin
9
+
10
+ @mixin prefixer ($property, $value, $prefixes) {
11
+ @each $prefix in $prefixes {
12
+ @if $prefix == webkit {
13
+ @if $prefix-for-webkit {
14
+ -webkit-#{$property}: $value;
15
+ }
16
+ }
17
+ @else if $prefix == moz {
18
+ @if $prefix-for-mozilla {
19
+ -moz-#{$property}: $value;
20
+ }
21
+ }
22
+ @else if $prefix == ms {
23
+ @if $prefix-for-microsoft {
24
+ -ms-#{$property}: $value;
25
+ }
26
+ }
27
+ @else if $prefix == o {
28
+ @if $prefix-for-opera {
29
+ -o-#{$property}: $value;
30
+ }
31
+ }
32
+ @else if $prefix == spec {
33
+ @if $prefix-for-spec {
34
+ #{$property}: $value;
35
+ }
36
+ }
37
+ @else {
38
+ @warn "Unrecognized prefix: #{$prefix}";
39
+ }
40
+ }
41
+ }
42
+
43
+ @mixin disable-prefix-for-all() {
44
+ $prefix-for-webkit: false;
45
+ $prefix-for-mozilla: false;
46
+ $prefix-for-microsoft: false;
47
+ $prefix-for-opera: false;
48
+ $prefix-for-spec: false;
49
+ }
@@ -0,0 +1,129 @@
1
+ @mixin screen($threshold: max-width, $screen: 1080px) {
2
+ @media ($threshold: $screen) {
3
+ @content;
4
+ }
5
+ }
6
+
7
+ @mixin desktop {
8
+ @media (min-width: $tablet-threshold + 1) {
9
+ @content;
10
+ }
11
+ }
12
+
13
+ @mixin mobile {
14
+ @media (max-width: $mobile-threshold) {
15
+ @content;
16
+ }
17
+ }
18
+
19
+ @mixin mobile-landscape {
20
+ @media (max-width: $mobile-landscape-threshold) {
21
+ @content;
22
+ }
23
+ }
24
+
25
+ @mixin tablet {
26
+ @media (max-width: $tablet-threshold) {
27
+ @content;
28
+ }
29
+ }
30
+
31
+ @mixin tablet-landscape {
32
+ @media (max-width: $tablet-landscape-threshold) {
33
+ @content;
34
+ }
35
+ }
36
+
37
+ @mixin large-screen {
38
+ @media (min-width: $large-screen-threshold) {
39
+ @content;
40
+ }
41
+ }
42
+
43
+ @mixin screen-max-height($screen-height: 750px) {
44
+ @media (max-height: $screen-height) {
45
+ @content;
46
+ }
47
+ }
48
+
49
+ @mixin columns(
50
+ $desktop: $tartan-column-count,
51
+ $tablet: "",
52
+ $mobile: ""
53
+ ) {
54
+ @include tartan-span-columns($desktop);
55
+
56
+ @if ($desktop == 1) {
57
+ &:nth-child(12n + 12) { @include tartan-omega; }
58
+ }
59
+
60
+ @if ($desktop == 2) {
61
+ &:nth-child(6n + 6) { @include tartan-omega; }
62
+ }
63
+
64
+ @if ($desktop == 3) {
65
+ &:nth-child(4n + 4) { @include tartan-omega; }
66
+ }
67
+
68
+ @if ($desktop == 4) {
69
+ &:nth-child(3n + 3) { @include tartan-omega; }
70
+ }
71
+
72
+ @if ($desktop == 6) {
73
+ &:nth-child(even) { @include tartan-omega; }
74
+ }
75
+
76
+ @if ($tablet != "") {
77
+ @include tablet {
78
+ &:nth-child(n) { @include tartan-no-omega } // Specificity
79
+ @include tartan-span-columns($tablet);
80
+
81
+ @if ($tablet == 1) {
82
+ &:nth-child(12n + 12) { @include tartan-omega; }
83
+ }
84
+
85
+ @if ($tablet == 2) {
86
+ &:nth-child(6n + 6) { @include tartan-omega; }
87
+ }
88
+
89
+ @if ($tablet == 3) {
90
+ &:nth-child(4n + 4) { @include tartan-omega; }
91
+ }
92
+
93
+ @if ($tablet == 4) {
94
+ &:nth-child(3n + 3) { @include tartan-omega; }
95
+ }
96
+
97
+ @if ($tablet == 6) {
98
+ &:nth-child(2n + 2) { @include tartan-omega; }
99
+ }
100
+ }
101
+ }
102
+
103
+ @if ($mobile != "") {
104
+ @include mobile-landscape {
105
+ &:nth-child(n) { @include tartan-no-omega } // Specificity
106
+ @include tartan-span-columns($mobile);
107
+
108
+ @if ($mobile == 1) {
109
+ &:nth-child(12n + 12) { @include tartan-omega; }
110
+ }
111
+
112
+ @if ($mobile == 2) {
113
+ &:nth-child(6n + 6) { @include tartan-omega; }
114
+ }
115
+
116
+ @if ($mobile == 3) {
117
+ &:nth-child(4n + 4) { @include tartan-omega; }
118
+ }
119
+
120
+ @if ($mobile == 4) {
121
+ &:nth-child(3n + 3) { @include tartan-omega; }
122
+ }
123
+
124
+ @if ($mobile == 6) {
125
+ &:nth-child(even) { @include tartan-omega; }
126
+ }
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,31 @@
1
+ @mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $asset-pipeline: false) {
2
+ @if $asset-pipeline {
3
+ background-image: image-url("#{$filename}.#{$extension}");
4
+ }
5
+ @else {
6
+ background-image: url("#{$filename}.#{$extension}");
7
+ }
8
+
9
+ @include hidpi {
10
+ @if $asset-pipeline {
11
+ @if $retina-filename {
12
+ background-image: image-url("#{$retina-filename}.#{$extension}");
13
+ }
14
+ @else {
15
+ background-image: image-url("#{$filename}@2x.#{$extension}");
16
+ }
17
+ }
18
+
19
+ @else {
20
+ @if $retina-filename {
21
+ background-image: url("#{$retina-filename}.#{$extension}");
22
+ }
23
+ @else {
24
+ background-image: url("#{$filename}@2x.#{$extension}");
25
+ }
26
+ }
27
+
28
+ background-size: $background-size;
29
+
30
+ }
31
+ }
@@ -0,0 +1,44 @@
1
+ @mixin size($size) {
2
+ @if length($size) == 1 {
3
+ @if $size == auto {
4
+ width: $size;
5
+ height: $size;
6
+ }
7
+
8
+ @else if unitless($size) {
9
+ width: $size + px;
10
+ height: $size + px;
11
+ }
12
+
13
+ @else if not(unitless($size)) {
14
+ width: $size;
15
+ height: $size;
16
+ }
17
+ }
18
+
19
+ // Width x Height
20
+ @if length($size) == 2 {
21
+ $width: nth($size, 1);
22
+ $height: nth($size, 2);
23
+
24
+ @if $width == auto {
25
+ width: $width;
26
+ }
27
+ @else if not(unitless($width)) {
28
+ width: $width;
29
+ }
30
+ @else if unitless($width) {
31
+ width: $width + px;
32
+ }
33
+
34
+ @if $height == auto {
35
+ height: $height;
36
+ }
37
+ @else if not(unitless($height)) {
38
+ height: $height;
39
+ }
40
+ @else if unitless($height) {
41
+ height: $height + px;
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,34 @@
1
+ // Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
2
+ // Example: @include transition (all, 2.0s, ease-in-out);
3
+ // @include transition ((opacity, width), (1.0s, 2.0s), ease-in, (0, 2s));
4
+ // @include transition ($property:(opacity, width), $delay: (1.5s, 2.5s));
5
+
6
+ @mixin transition ($properties...) {
7
+ @if length($properties) >= 1 {
8
+ @include prefixer(transition, $properties, webkit moz spec);
9
+ }
10
+
11
+ @else {
12
+ $properties: all 0.15s ease-out 0;
13
+ @include prefixer(transition, $properties, webkit moz spec);
14
+ }
15
+ }
16
+
17
+ @mixin transition-property ($properties...) {
18
+ -webkit-transition-property: transition-property-names($properties, 'webkit');
19
+ -moz-transition-property: transition-property-names($properties, 'moz');
20
+ transition-property: transition-property-names($properties, false);
21
+ }
22
+
23
+ @mixin transition-duration ($times...) {
24
+ @include prefixer(transition-duration, $times, webkit moz spec);
25
+ }
26
+
27
+ @mixin transition-timing-function ($motions...) {
28
+ // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
29
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
30
+ }
31
+
32
+ @mixin transition-delay ($times...) {
33
+ @include prefixer(transition-delay, $times, webkit moz spec);
34
+ }
@@ -0,0 +1,45 @@
1
+ @mixin triangle ($size, $color, $direction) {
2
+ height: 0;
3
+ width: 0;
4
+
5
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
6
+ border-color: transparent;
7
+ border-style: solid;
8
+ border-width: $size / 2;
9
+
10
+ @if $direction == up {
11
+ border-bottom-color: $color;
12
+
13
+ } @else if $direction == right {
14
+ border-left-color: $color;
15
+
16
+ } @else if $direction == down {
17
+ border-top-color: $color;
18
+
19
+ } @else if $direction == left {
20
+ border-right-color: $color;
21
+ }
22
+ }
23
+
24
+ @else if ($direction == up-right) or ($direction == up-left) {
25
+ border-top: $size solid $color;
26
+
27
+ @if $direction == up-right {
28
+ border-left: $size solid transparent;
29
+
30
+ } @else if $direction == up-left {
31
+ border-right: $size solid transparent;
32
+ }
33
+ }
34
+
35
+ @else if ($direction == down-right) or ($direction == down-left) {
36
+ border-bottom: $size solid $color;
37
+
38
+ @if $direction == down-right {
39
+ border-left: $size solid transparent;
40
+
41
+ } @else if $direction == down-left {
42
+ border-right: $size solid transparent;
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "Engineering",
3
+ "description": "Heroku engineering blog",
4
+ "website": "https://engineering.heroku.com/",
5
+ "repository": "https://github.com/heroku/engineering",
6
+ "success_url": "/",
7
+ "buildpacks": [
8
+ {
9
+ "url": "https://github.com/dmathieu/heroku-buildpack-jekyll.git"
10
+ },
11
+ {
12
+ "url": "https://github.com/hone/heroku-buildpack-static"
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ cat | fold -s -w 72 | sed -e 's/“/"/' | sed -e 's/”/"/'
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+
3
+ if [ -z "$DEPLOY" ]; then
4
+ echo "Missing DEPLOY" 1>&2; exit 1
5
+ fi
6
+
7
+ set -exo pipefail
8
+
9
+ heroku create -r $DEPLOY heroku-engineering-$DEPLOY
10
+
11
+ heroku buildpacks:add https://github.com/dmathieu/heroku-buildpack-jekyll.git -r $DEPLOY
12
+ heroku buildpacks:add https://github.com/hone/heroku-buildpack-static.git -r $DEPLOY
13
+
14
+ git push $DEPLOY $(git rev-parse --abbrev-ref HEAD):master
15
+ heroku open -r $DEPLOY
@@ -0,0 +1,34 @@
1
+ ---
2
+ layout: null
3
+ ---
4
+ <?xml version="1.0" encoding="UTF-8"?>
5
+ <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
6
+ <channel>
7
+ <title>{{ site.title | xml_escape }}</title>
8
+ <description>{{ site.description | xml_escape }}</description>
9
+ <link>{{ site.url }}{{ site.baseurl }}/</link>
10
+ <atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
11
+ <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
12
+ <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
13
+ <generator>Jekyll v{{ jekyll.version }}</generator>
14
+
15
+ {% for post in site.posts limit:10 %}
16
+ <item>
17
+ <title>{{ post.title | xml_escape }}</title>
18
+ <description>{{ post.content | xml_escape }}</description>
19
+ <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
20
+ <link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
21
+ <guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
22
+
23
+ {% for tag in post.tags %}
24
+ <category>{{ tag | xml_escape }}</category>
25
+ {% endfor %}
26
+
27
+ {% for cat in post.categories %}
28
+ <category>{{ cat | xml_escape }}</category>
29
+ {% endfor %}
30
+
31
+ </item>
32
+ {% endfor %}
33
+ </channel>
34
+ </rss>
@@ -0,0 +1,40 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <div class="row">
6
+ <div class="col-xs-12">
7
+ <h1>Heroku Engineering Blog</h1>
8
+ </div>
9
+
10
+ {% for post in site.posts %}
11
+ <div class="col-xs-12">
12
+ <article>
13
+ <div class="row">
14
+ <div class="col-xs-12 col-md-6">
15
+ <header>
16
+ <h2><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a></h2>
17
+ <div class="byline">
18
+ <time>{{ post.date | date: "%B %-d, %Y" }}</time>
19
+
20
+ {% if post.author_name %}
21
+ by {{ post.author_name }}
22
+ {% endif %}
23
+ </div>
24
+ </header>
25
+ </div>
26
+ <div class="col-xs-12 col-md-6">
27
+ {{ post.excerpt }}
28
+ <a href="{{ post.url | prepend: site.baseurl }}">Read more →</a>
29
+ </div>
30
+ </div>
31
+ </article>
32
+ </div>
33
+ {% endfor %}
34
+ </div>
35
+
36
+ <div id="feeds" style="margin-top:30px">
37
+ <p>
38
+ Subscribe to the <a title="Full-text RSS feed" href="/feed.xml">full-text</a> feed.
39
+ </p>
40
+ </div>
@@ -0,0 +1,3 @@
1
+ {
2
+ "https_only": true
3
+ }
@@ -0,0 +1,9 @@
1
+ # Bookends Dummy App
2
+
3
+ ### Spin up
4
+ ```
5
+ $ bundle install
6
+ $ cd project_root/spec/dummy/
7
+ $ rails s
8
+ $ open http://localhost:3000
9
+ ```
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks