benevolent_gaze 1.0.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.
Files changed (157) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +112 -0
  6. data/Rakefile +2 -0
  7. data/benevolent_gaze.gemspec +35 -0
  8. data/bin/benevolent_gaze +5 -0
  9. data/frontend/.gitignore +15 -0
  10. data/frontend/Gemfile +21 -0
  11. data/frontend/Gemfile.lock +162 -0
  12. data/frontend/config.rb +56 -0
  13. data/frontend/data/site.yml +4 -0
  14. data/frontend/source/images/.gitkeep +0 -0
  15. data/frontend/source/images/board@1x.png +0 -0
  16. data/frontend/source/images/city@1x.png +0 -0
  17. data/frontend/source/images/complete_left_panel@1x.png +0 -0
  18. data/frontend/source/images/icon_password@1x.png +0 -0
  19. data/frontend/source/images/icon_wifi@1x.png +0 -0
  20. data/frontend/source/images/logo@1x.png +0 -0
  21. data/frontend/source/images/pin_rope@1x.png +0 -0
  22. data/frontend/source/images/register@2x.png +0 -0
  23. data/frontend/source/images/sky@1x.png +0 -0
  24. data/frontend/source/images/sky_register@1x.png +0 -0
  25. data/frontend/source/images/sun@1x.png +0 -0
  26. data/frontend/source/images/tape_left@1x.png +0 -0
  27. data/frontend/source/images/tape_right@1x.png +0 -0
  28. data/frontend/source/images/thanks@2x.png +0 -0
  29. data/frontend/source/images/uploads/info.txt +1 -0
  30. data/frontend/source/images/visitor_art@1x.png +0 -0
  31. data/frontend/source/images/welcome@1x.png +0 -0
  32. data/frontend/source/index.html.haml +33 -0
  33. data/frontend/source/javascripts/all.js +161 -0
  34. data/frontend/source/layouts/layout.haml +23 -0
  35. data/frontend/source/register.html.haml +21 -0
  36. data/frontend/source/stylesheets/animate.css.scss +3176 -0
  37. data/frontend/source/stylesheets/application.css.scss +291 -0
  38. data/frontend/source/thanks.html.haml +8 -0
  39. data/kiosk/.env +7 -0
  40. data/kiosk/Procfile +2 -0
  41. data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-22037a34.woff +0 -0
  42. data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-66b1fc67.svg +229 -0
  43. data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-aafafdc0.ttf +0 -0
  44. data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-f3a9a3b6.eot +0 -0
  45. data/kiosk/public/images/board@1x-b5fb87e5.png +0 -0
  46. data/kiosk/public/images/city@1x-22396032.png +0 -0
  47. data/kiosk/public/images/complete_left_panel@1x-7dec25da.png +0 -0
  48. data/kiosk/public/images/icon_password@1x-fb34b974.png +0 -0
  49. data/kiosk/public/images/icon_wifi@1x-e92e9c20.png +0 -0
  50. data/kiosk/public/images/logo@1x-927932fa.png +0 -0
  51. data/kiosk/public/images/pin_rope@1x-f5912856.png +0 -0
  52. data/kiosk/public/images/register@2x-328082c6.png +0 -0
  53. data/kiosk/public/images/sky@1x-47babe39.png +0 -0
  54. data/kiosk/public/images/sky_register@1x-cd96f779.png +0 -0
  55. data/kiosk/public/images/sun@1x-4f644bff.png +0 -0
  56. data/kiosk/public/images/tape_left@1x-9f3af6c1.png +0 -0
  57. data/kiosk/public/images/tape_right@1x-646752c4.png +0 -0
  58. data/kiosk/public/images/thanks@2x-694b424f.png +0 -0
  59. data/kiosk/public/images/uploads/info.txt +1 -0
  60. data/kiosk/public/images/visitor_art@1x-21d82dcb.png +0 -0
  61. data/kiosk/public/images/welcome@1x-7d17fbb9.png +0 -0
  62. data/kiosk/public/index.html +74 -0
  63. data/kiosk/public/javascripts/all-eb365891.js +12256 -0
  64. data/kiosk/public/register.html +52 -0
  65. data/kiosk/public/stylesheets/animate-31203878.css +6 -0
  66. data/kiosk/public/stylesheets/application-70841e1d.css +1 -0
  67. data/kiosk/public/thanks.html +36 -0
  68. data/lib/benevolent_gaze/bgapp.rb +39 -0
  69. data/lib/benevolent_gaze/cli.rb +153 -0
  70. data/lib/benevolent_gaze/kiosk.rb +164 -0
  71. data/lib/benevolent_gaze/kiosk_bak.rb +164 -0
  72. data/lib/benevolent_gaze/tracker.rb +87 -0
  73. data/lib/benevolent_gaze/version.rb +3 -0
  74. data/lib/benevolent_gaze.rb +5 -0
  75. data/website/.gitignore +18 -0
  76. data/website/Gemfile +20 -0
  77. data/website/Gemfile.lock +151 -0
  78. data/website/config.rb +58 -0
  79. data/website/data/site.yml +4 -0
  80. data/website/source/CNAME +1 -0
  81. data/website/source/fonts/OpenSans-Regular-webfont.eot +0 -0
  82. data/website/source/fonts/OpenSans-Regular-webfont.svg +1831 -0
  83. data/website/source/fonts/OpenSans-Regular-webfont.ttf +0 -0
  84. data/website/source/fonts/OpenSans-Regular-webfont.woff +0 -0
  85. data/website/source/fonts/Oswald-Bold.eot +0 -0
  86. data/website/source/fonts/Oswald-Bold.svg +0 -0
  87. data/website/source/fonts/Oswald-Bold.ttf +0 -0
  88. data/website/source/fonts/Oswald-Bold.woff +0 -0
  89. data/website/source/fonts/Oswald-Light.eot +0 -0
  90. data/website/source/fonts/Oswald-Light.svg +0 -0
  91. data/website/source/fonts/Oswald-Light.ttf +0 -0
  92. data/website/source/fonts/Oswald-Light.woff +0 -0
  93. data/website/source/fonts/Oswald-Regular.eot +0 -0
  94. data/website/source/fonts/Oswald-Regular.svg +0 -0
  95. data/website/source/fonts/Oswald-Regular.ttf +0 -0
  96. data/website/source/fonts/Oswald-Regular.woff +0 -0
  97. data/website/source/fonts/TradeGothic-BoldCondTwenty.eot +0 -0
  98. data/website/source/fonts/TradeGothic-BoldCondTwenty.svg +0 -0
  99. data/website/source/fonts/TradeGothic-BoldCondTwenty.ttf +0 -0
  100. data/website/source/fonts/TradeGothic-BoldCondTwenty.woff +0 -0
  101. data/website/source/fonts/TradeGothic-CondEighteen.eot +0 -0
  102. data/website/source/fonts/TradeGothic-CondEighteen.svg +0 -0
  103. data/website/source/fonts/TradeGothic-CondEighteen.ttf +0 -0
  104. data/website/source/fonts/TradeGothic-CondEighteen.woff +0 -0
  105. data/website/source/fonts/telegrafico_by_ficod-webfont.eot +0 -0
  106. data/website/source/fonts/telegrafico_by_ficod-webfont.svg +95 -0
  107. data/website/source/fonts/telegrafico_by_ficod-webfont.ttf +0 -0
  108. data/website/source/fonts/telegrafico_by_ficod-webfont.woff +0 -0
  109. data/website/source/images/.gitkeep +0 -0
  110. data/website/source/images/gaze.png +0 -0
  111. data/website/source/images/splash/accessorized_badge@2x.png +0 -0
  112. data/website/source/images/splash/benevolent_gaze_icon@2x.png +0 -0
  113. data/website/source/images/splash/benevolent_gaze_logo@2x.png +0 -0
  114. data/website/source/images/splash/benevolent_gaze_logo_color@2x.png +0 -0
  115. data/website/source/images/splash/benevolent_gaze_text@2x.png +0 -0
  116. data/website/source/images/splash/brackets.png +0 -0
  117. data/website/source/images/splash/checkmark.png +0 -0
  118. data/website/source/images/splash/circle_for_logo@2x.png +0 -0
  119. data/website/source/images/splash/cloud_cover@2x.png +0 -0
  120. data/website/source/images/splash/clouds.png +0 -0
  121. data/website/source/images/splash/complete_badge@2x.png +0 -0
  122. data/website/source/images/splash/down_arrow.png +0 -0
  123. data/website/source/images/splash/easy_badge@2x.png +0 -0
  124. data/website/source/images/splash/faded-clouds.png +0 -0
  125. data/website/source/images/splash/github_banner@2x.png +0 -0
  126. data/website/source/images/splash/hero_bkg.png +0 -0
  127. data/website/source/images/splash/left-bracket.png +0 -0
  128. data/website/source/images/splash/more-awesome-stuff.png +0 -0
  129. data/website/source/images/splash/overbracket.png +0 -0
  130. data/website/source/images/splash/rainbow@2x.png +0 -0
  131. data/website/source/images/splash/rainbow_banner@2x.png +0 -0
  132. data/website/source/images/splash/right-bracket.png +0 -0
  133. data/website/source/images/splash/seed-logo-color.png +0 -0
  134. data/website/source/images/splash/seed-logo.png +0 -0
  135. data/website/source/images/splash/sensible-defaults.png +0 -0
  136. data/website/source/images/splash/single_check@2x.png +0 -0
  137. data/website/source/images/splash/sky_background.png +0 -0
  138. data/website/source/images/splash/solid-gems.png +0 -0
  139. data/website/source/images/splash/ted.png +0 -0
  140. data/website/source/images/splash/ted_on_unicorn@2x.png +0 -0
  141. data/website/source/images/splash/view-me-on-github.png +0 -0
  142. data/website/source/index.html.haml +181 -0
  143. data/website/source/javascripts/all.js +3 -0
  144. data/website/source/javascripts/modernizr.js +1406 -0
  145. data/website/source/javascripts/scrollReveal.js +398 -0
  146. data/website/source/layouts/_footer.html.haml +34 -0
  147. data/website/source/layouts/_javascripts.erb +9 -0
  148. data/website/source/layouts/docs_layout.haml +23 -0
  149. data/website/source/layouts/layout.haml +87 -0
  150. data/website/source/stylesheets/animate.css +3158 -0
  151. data/website/source/stylesheets/application.css.scss +534 -0
  152. data/website/source/stylesheets/fonts/socicon-webfont.eot +0 -0
  153. data/website/source/stylesheets/fonts/socicon-webfont.svg +90 -0
  154. data/website/source/stylesheets/fonts/socicon-webfont.ttf +0 -0
  155. data/website/source/stylesheets/fonts/socicon-webfont.woff +0 -0
  156. data/website/source/stylesheets/socicons.css +124 -0
  157. metadata +382 -0
@@ -0,0 +1,398 @@
1
+ /*
2
+ _ _ _____ _ _
3
+ | | | __ \ | | (_)
4
+ ___ ___ _ __ ___ | | | |__) |_____ _____ __ _| | _ ___
5
+ / __|/ __| '__/ _ \| | | _ // _ \ \ / / _ \/ _` | | | / __|
6
+ \__ \ (__| | | (_) | | | | \ \ __/\ V / __/ (_| | |_| \__ \
7
+ |___/\___|_| \___/|_|_|_| \_\___| \_/ \___|\__,_|_(_) |___/ v.0.1.3
8
+ _/ |
9
+ |__/
10
+
11
+ "Declarative on-scroll reveal animations."
12
+
13
+ /*=============================================================================
14
+
15
+ scrollReveal.js was inspired by cbpScroller.js (c) 2014 Codrops.
16
+
17
+ Licensed under the MIT license.
18
+ http://www.opensource.org/licenses/mit-license.php
19
+
20
+ =============================================================================*/
21
+
22
+ /*! scrollReveal.js v0.1.3 (c) 2014 Julian Lloyd | MIT license */
23
+
24
+ /*===========================================================================*/
25
+
26
+
27
+ window.scrollReveal = (function (window) {
28
+
29
+ 'use strict';
30
+
31
+ // generator (increments) for the next scroll-reveal-id
32
+ var nextId = 1;
33
+
34
+ /**
35
+ * RequestAnimationFrame polyfill
36
+ * @function
37
+ * @private
38
+ */
39
+ var requestAnimFrame = (function () {
40
+ return window.requestAnimationFrame ||
41
+ window.webkitRequestAnimationFrame ||
42
+ window.mozRequestAnimationFrame ||
43
+ function (callback) {
44
+ window.setTimeout(callback, 1000 / 60);
45
+ };
46
+ }());
47
+
48
+ function scrollReveal(options) {
49
+
50
+ this.docElem = window.document.documentElement;
51
+ this.options = this.extend(this.defaults, options);
52
+ this.styleBank = {};
53
+
54
+ if (this.options.init == true) this.init();
55
+ }
56
+
57
+ scrollReveal.prototype = {
58
+
59
+ defaults: {
60
+ after: '0s',
61
+ enter: 'bottom',
62
+ move: '24px',
63
+ over: '0.66s',
64
+ easing: 'ease-in-out',
65
+ opacity: 0,
66
+
67
+ // if 0, the element is considered in the viewport as soon as it enters
68
+ // if 1, the element is considered in the viewport when it's fully visible
69
+ viewportFactor: 0.33,
70
+
71
+ // if false, animations occur only once
72
+ // if true, animations occur each time an element enters the viewport
73
+ reset: false,
74
+
75
+ // if true, scrollReveal.init() is automaticaly called upon instantiation
76
+ init: true
77
+ },
78
+
79
+ /*=============================================================================*/
80
+
81
+ init: function () {
82
+
83
+ this.scrolled = false;
84
+
85
+ var self = this;
86
+
87
+ // Check DOM for the data-scrollReveal attribute
88
+ // and initialize all found elements.
89
+ this.elems = Array.prototype.slice.call(this.docElem.querySelectorAll('[data-scroll-reveal]'));
90
+ this.elems.forEach(function (el, i) {
91
+
92
+ // Capture original style attribute
93
+ var id = el.getAttribute("data-scroll-reveal-id");
94
+ if (!id) {
95
+ id = nextId++;
96
+ el.setAttribute("data-scroll-reveal-id", id);
97
+ }
98
+ if (!self.styleBank[id]) {
99
+ self.styleBank[id] = el.getAttribute('style');
100
+ }
101
+
102
+ self.update(el);
103
+ });
104
+
105
+ var scrollHandler = function (e) {
106
+ // No changing, exit
107
+ if (!self.scrolled) {
108
+ self.scrolled = true;
109
+ requestAnimFrame(function () {
110
+ self._scrollPage();
111
+ });
112
+ }
113
+ };
114
+
115
+ var resizeHandler = function () {
116
+
117
+ // If we’re still waiting for settimeout, reset the timer.
118
+ if (self.resizeTimeout) {
119
+ clearTimeout(self.resizeTimeout);
120
+ }
121
+ function delayed() {
122
+ self._scrollPage();
123
+ self.resizeTimeout = null;
124
+ }
125
+ self.resizeTimeout = setTimeout(delayed, 200);
126
+ };
127
+
128
+ // captureScroll
129
+ window.addEventListener('scroll', scrollHandler, false);
130
+ window.addEventListener('resize', resizeHandler, false);
131
+ },
132
+
133
+ /*=============================================================================*/
134
+
135
+ _scrollPage: function () {
136
+ var self = this;
137
+
138
+ this.elems.forEach(function (el, i) {
139
+ self.update(el);
140
+ });
141
+ this.scrolled = false;
142
+ },
143
+
144
+ /*=============================================================================*/
145
+
146
+ parseLanguage: function (el) {
147
+
148
+ // Splits on a sequence of one or more commas or spaces.
149
+ var words = el.getAttribute('data-scroll-reveal').split(/[, ]+/),
150
+ parsed = {};
151
+
152
+ function filter (words) {
153
+ var ret = [],
154
+
155
+ blacklist = [
156
+ "from",
157
+ "the",
158
+ "and",
159
+ "then",
160
+ "but",
161
+ "with"
162
+ ];
163
+
164
+ words.forEach(function (word, i) {
165
+ if (blacklist.indexOf(word) > -1) {
166
+ return;
167
+ }
168
+ ret.push(word);
169
+ });
170
+
171
+ return ret;
172
+ }
173
+
174
+ words = filter(words);
175
+
176
+ words.forEach(function (word, i) {
177
+
178
+ switch (word) {
179
+ case "enter":
180
+ parsed.enter = words[i + 1];
181
+ return;
182
+
183
+ case "after":
184
+ parsed.after = words[i + 1];
185
+ return;
186
+
187
+ case "wait":
188
+ parsed.after = words[i + 1];
189
+ return;
190
+
191
+ case "move":
192
+ parsed.move = words[i + 1];
193
+ return;
194
+
195
+ case "ease":
196
+ parsed.move = words[i + 1];
197
+ parsed.ease = "ease";
198
+ return;
199
+
200
+ case "ease-in":
201
+ parsed.move = words[i + 1];
202
+ parsed.easing = "ease-in";
203
+ return;
204
+
205
+ case "ease-in-out":
206
+ parsed.move = words[i + 1];
207
+ parsed.easing = "ease-in-out";
208
+ return;
209
+
210
+ case "ease-out":
211
+ parsed.move = words[i + 1];
212
+ parsed.easing = "ease-out";
213
+ return;
214
+
215
+ case "over":
216
+ parsed.over = words[i + 1];
217
+ return;
218
+
219
+ default:
220
+ return;
221
+ }
222
+ });
223
+
224
+ return parsed;
225
+ },
226
+
227
+
228
+ /*=============================================================================*/
229
+
230
+ update: function (el) {
231
+
232
+ var css = this.genCSS(el);
233
+ var style = this.styleBank[el.getAttribute("data-scroll-reveal-id")];
234
+
235
+ if (style != null) style += ";"; else style = "";
236
+
237
+ if (!el.getAttribute('data-scroll-reveal-initialized')) {
238
+ el.setAttribute('style', style + css.initial);
239
+ el.setAttribute('data-scroll-reveal-initialized', true);
240
+ }
241
+
242
+ if (!this.isElementInViewport(el, this.options.viewportFactor)) {
243
+ if (this.options.reset) {
244
+ el.setAttribute('style', style + css.initial + css.reset);
245
+ }
246
+ return;
247
+ }
248
+
249
+ if (el.getAttribute('data-scroll-reveal-complete')) return;
250
+
251
+ if (this.isElementInViewport(el, this.options.viewportFactor)) {
252
+ el.setAttribute('style', style + css.target + css.transition);
253
+ // Without reset enabled, we can safely remove the style tag
254
+ // to prevent CSS specificy wars with authored CSS.
255
+ if (!this.options.reset) {
256
+ setTimeout(function () {
257
+ if (style != "") {
258
+ el.setAttribute('style', style);
259
+ } else {
260
+ el.removeAttribute('style');
261
+ }
262
+ el.setAttribute('data-scroll-reveal-complete',true);
263
+ }, css.totalDuration);
264
+ }
265
+ return;
266
+ }
267
+ },
268
+
269
+ /*=============================================================================*/
270
+
271
+ genCSS: function (el) {
272
+ var parsed = this.parseLanguage(el),
273
+ enter,
274
+ axis;
275
+
276
+ if (parsed.enter) {
277
+
278
+ if (parsed.enter == "top" || parsed.enter == "bottom") {
279
+ enter = parsed.enter;
280
+ axis = "y";
281
+ }
282
+
283
+ if (parsed.enter == "left" || parsed.enter == "right") {
284
+ enter = parsed.enter;
285
+ axis = "x";
286
+ }
287
+
288
+ } else {
289
+
290
+ if (this.options.enter == "top" || this.options.enter == "bottom") {
291
+ enter = this.options.enter
292
+ axis = "y";
293
+ }
294
+
295
+ if (this.options.enter == "left" || this.options.enter == "right") {
296
+ enter = this.options.enter
297
+ axis = "x";
298
+ }
299
+ }
300
+
301
+ // After all values are parsed, let’s make sure our our
302
+ // pixel distance is negative for top and left entrances.
303
+ //
304
+ // ie. "move 25px from top" starts at 'top: -25px' in CSS.
305
+
306
+ if (enter == "top" || enter == "left") {
307
+ if (parsed.move) {
308
+ parsed.move = "-" + parsed.move;
309
+ }
310
+ else {
311
+ parsed.move = "-" + this.options.move;
312
+ }
313
+ }
314
+
315
+ var dist = parsed.move || this.options.move,
316
+ dur = parsed.over || this.options.over,
317
+ delay = parsed.after || this.options.after,
318
+ easing = parsed.easing || this.options.easing,
319
+ opacity = parsed.opacity || this.options.opacity;
320
+
321
+ var transition = "-webkit-transition: -webkit-transform " + dur + " " + easing + " " + delay + ", opacity " + dur + " " + easing + " " + delay + ";" +
322
+ "transition: transform " + dur + " " + easing + " " + delay + ", opacity " + dur + " " + easing + " " + delay + ";" +
323
+ "-webkit-perspective: 1000;" +
324
+ "-webkit-backface-visibility: hidden;";
325
+
326
+ // The same as transition, but removing the delay for elements fading out.
327
+ var reset = "-webkit-transition: -webkit-transform " + dur + " " + easing + " 0s, opacity " + dur + " " + easing + " " + delay + ";" +
328
+ "transition: transform " + dur + " " + easing + " 0s, opacity " + dur + " " + easing + " " + delay + ";" +
329
+ "-webkit-perspective: 1000;" +
330
+ "-webkit-backface-visibility: hidden;";
331
+
332
+ var initial = "-webkit-transform: translate" + axis + "(" + dist + ");" +
333
+ "transform: translate" + axis + "(" + dist + ");" +
334
+ "opacity: " + opacity + ";";
335
+
336
+ var target = "-webkit-transform: translate" + axis + "(0);" +
337
+ "transform: translate" + axis + "(0);" +
338
+ "opacity: 1;";
339
+ return {
340
+ transition: transition,
341
+ initial: initial,
342
+ target: target,
343
+ reset: reset,
344
+ totalDuration: ((parseFloat(dur) + parseFloat(delay)) * 1000)
345
+ };
346
+ },
347
+
348
+ getViewportH : function () {
349
+ var client = this.docElem['clientHeight'],
350
+ inner = window['innerHeight'];
351
+
352
+ return (client < inner) ? inner : client;
353
+ },
354
+
355
+ getOffset : function(el) {
356
+ var offsetTop = 0,
357
+ offsetLeft = 0;
358
+
359
+ do {
360
+ if (!isNaN(el.offsetTop)) {
361
+ offsetTop += el.offsetTop;
362
+ }
363
+ if (!isNaN(el.offsetLeft)) {
364
+ offsetLeft += el.offsetLeft;
365
+ }
366
+ } while (el = el.offsetParent)
367
+
368
+ return {
369
+ top: offsetTop,
370
+ left: offsetLeft
371
+ }
372
+ },
373
+
374
+ isElementInViewport : function(el, h) {
375
+ var scrolled = window.pageYOffset,
376
+ viewed = scrolled + this.getViewportH(),
377
+ elH = el.offsetHeight,
378
+ elTop = this.getOffset(el).top,
379
+ elBottom = elTop + elH,
380
+ h = h || 0;
381
+
382
+ return (elTop + elH * h) <= viewed
383
+ && (elBottom) >= scrolled
384
+ || (el.currentStyle? el.currentStyle : window.getComputedStyle(el, null)).position == 'fixed';
385
+ },
386
+
387
+ extend: function (a, b){
388
+ for (var key in b) {
389
+ if (b.hasOwnProperty(key)) {
390
+ a[key] = b[key];
391
+ }
392
+ }
393
+ return a;
394
+ }
395
+ }; // end scrollReveal.prototype
396
+
397
+ return scrollReveal;
398
+ })(window);
@@ -0,0 +1,34 @@
1
+ %section#who.navy.under
2
+ .background
3
+ .container
4
+ .row
5
+ .left-col
6
+ %h1.jumbo Who?
7
+ .right-col
8
+ %h2
9
+ Sign up for the HappyFunCorp mailing&nbsp;list!
10
+ %form.form-horizontal.md-3{ action: "//happyfuncorp.us8.list-manage.com/subscribe/post?u=4693df87615db712ba7e23f18&amp;id=d4f8c4b866", method: "post" }
11
+ %div{ style: "position: absolute; left: -5000px;"}
12
+ %input{ type: "text", name: "b_4693df87615db712ba7e23f18_d4f8c4b866", tabindex: "-1", value: "" }
13
+
14
+ .form-group#signup
15
+ .col-sm-12
16
+ .input-group
17
+ %input.form-control{ type: "email", name: "EMAIL", :placeholder=>'Enter your email periodic news from HFC' }
18
+ %span.input-group-btn
19
+ = submit_tag 'Sign Up', :class => "btn btn-primary"
20
+
21
+
22
+
23
+
24
+ %h3.outset.tel.mb-0
25
+ .icon.icon-seed-logo-white
26
+ Benevolent Gaze
27
+ %small is a
28
+ = link_to 'HappyFunCorp', 'http://happyfuncorp.com'
29
+ %small Production.
30
+ %br
31
+ %small Made in Brooklyn, NY.
32
+
33
+ %h3{style:"text-align:center"}
34
+ <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://gaze.happyfuncorp.com/" data-text="Get fabulous! Share the gaze!" data-via="happyfuncorp">Tweet</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
@@ -0,0 +1,9 @@
1
+ <%= javascript_include_tag 'all' %>
2
+ <script type="text/javascript">
3
+ <% if config.environment == :build && data['site']['google_analytics_id'] %>
4
+ var _gaq=[['_setAccount','<%= data['site']['google_analytics_id'] %>'],['_trackPageview']];
5
+ (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
6
+ g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
7
+ s.parentNode.insertBefore(g,s)}(document,'script'));
8
+ <% end %>
9
+ </script>
@@ -0,0 +1,23 @@
1
+ = wrap_layout :layout do
2
+ %section.docs.cream.under
3
+ .background
4
+ .container
5
+ .row
6
+ .col-sm-10.col-sm-push-2
7
+ ~ yield
8
+ .col-sm-2.col-sm-pull-10
9
+ %ul.nav.nav-pills.nav-stacked
10
+ %li{ class: current_page.path == "docs/index.html" ? "active" : nil }
11
+ = link_to "Usage", "/docs/index.html"
12
+ %li{ class: current_page.url == "/docs/rails.html" ? "active" : nil }
13
+ = link_to "Rails", "/docs/rails.html"
14
+ - if current_page.url == "/docs/rails.html" || current_page.url =~ /README/
15
+ - Dir.glob( "source/docs/README*").each do |f|
16
+ - l = f.gsub( /.*source\//, "/" ).gsub( /.html.*/, ".html" )
17
+ - n = f.gsub( /.*\d\d./, "" ).gsub( /.html.*/, "" ).capitalize
18
+ %li{ class: current_page.url == l ? "active" : nil }
19
+ = link_to " - #{n}", l
20
+ %li{ class: current_page.url == "/docs/plugin.html" ? "active" : nil }
21
+ = link_to "Plugins", "/docs/plugin.html"
22
+ %li{ class: current_page.url == "/docs/middleman.html" ? "active" : nil }
23
+ = link_to "Middleman", "/docs/middleman.html"
@@ -0,0 +1,87 @@
1
+ !!! 5
2
+ %html.no-js
3
+ %head
4
+ %meta{ :charset => 'utf-8' }/
5
+ %meta{ 'http-equiv' => 'X-UA-Compatible', :content => 'IE=edge,chrome=1' }/
6
+
7
+ %title Benevolent Gaze
8
+
9
+ %meta{ :name => 'description', :content => '' }/
10
+ %meta{ :name => 'viewport', :content => 'width=device-width,initial-scale=0.75' }/
11
+
12
+ <meta property="og:title" content="Benevolent Gaze"/>
13
+ <meta property="og:url" content="http://seed.happyfuncorp.com"/>
14
+ <meta property="og:type" content="website"/>
15
+ <meta property="og:image" content="https://s3.amazonaws.com/happyfuncorp-cdn/use-happy-seed.png"/>
16
+ <meta property="og:description" content="Roses are red, violets are blue, your code sucks because you’re not using seed."/>
17
+
18
+ = stylesheet_link_tag 'application', :media => nil
19
+
20
+ -# Append your own using content_for :stylesheets
21
+ / = yield :stylesheets
22
+ = javascript_include_tag 'modernizr'
23
+ -#= stylesheet_link_tag 'gh-fork-ribbon', :media => nil
24
+ <!--[if lt IE 9]>
25
+ = stylesheet_link_tag 'gh-fork-ribbon.ie', :media => nil
26
+ <![endif]-->
27
+
28
+ %body{ "data-spy" => "scroll", "data-target" => "#top"}
29
+ / # = render 'chromeframe'
30
+ / = render 'flashes'
31
+
32
+ = link_to "View Me on GitHub", "https://github.com/happyfuncorp/benevolent_gaze", :class=>'github-fork-ribbon'
33
+
34
+ %header#top.navbar.navbar-inverse.navbar-fixed-top{:role=>:banner}
35
+ .navbar-header
36
+ %button.navbar-toggle{:type=>:button, 'data-toggle'=>:collapse, 'data-target'=>'.navbar-collapse'}
37
+ %span.sr-only Toggle navigations
38
+ %span.icon-bar
39
+ %span.icon-bar
40
+ %span.icon-bar
41
+ = link_to '/index.html#benevolent-gaze', :class=>'navbar-brand' do
42
+ %span.icon.icon-seed-logo-white
43
+ Benevolent Gaze
44
+ %nav.collapse.navbar-collapse{:role=>:navigation}
45
+ %ul.nav.navbar-nav
46
+ %li= link_to 'What', '/index.html#what'
47
+ %li= link_to 'Why', '/index.html#why'
48
+ %li= link_to 'How', '/index.html#how'
49
+ %li= link_to 'Who', '/index.html#who'
50
+ -#%li.dropdown
51
+ %a.dropdown-toggle{ :href => "/docs.html", "data-toggle" => "dropdown"} Docs
52
+ %ul.dropdown-menu
53
+ %li= link_to 'Usage', "/docs/index.html"
54
+ %li= link_to 'Rails', "/docs/rails.html"
55
+ %li= link_to 'Plugins', "/docs/plugin.html"
56
+ %li= link_to 'Static', "/docs/middleman.html"
57
+
58
+ = yield
59
+
60
+ = partial 'layouts/footer'
61
+
62
+ -# Javascript at the bottom for fast page loading
63
+ = partial 'layouts/javascripts'
64
+
65
+ / # - unless mobile_device?
66
+ = javascript_include_tag 'scrollReveal.js'
67
+
68
+ :javascript
69
+ $(function() {
70
+ window.scrollReveal = new scrollReveal();
71
+ $("a").on('click', function(e) {
72
+ if( ! $(this).attr('href') || ! $(this).attr('href').match(/^#/) ) return;
73
+ e.preventDefault();
74
+
75
+ // store hash
76
+ var hash = this.hash;
77
+
78
+ // animate
79
+ $('html, body').animate({
80
+ scrollTop: $(this.hash).offset().top
81
+ }, 300, function(){
82
+ // when done, add hash to url
83
+ // (default click behaviour)
84
+ window.location.hash = hash;
85
+ });
86
+ });
87
+ });