benevolent_gaze 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ });