benevolent_gaze 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +112 -0
- data/Rakefile +2 -0
- data/benevolent_gaze.gemspec +35 -0
- data/bin/benevolent_gaze +5 -0
- data/frontend/.gitignore +15 -0
- data/frontend/Gemfile +21 -0
- data/frontend/Gemfile.lock +162 -0
- data/frontend/config.rb +56 -0
- data/frontend/data/site.yml +4 -0
- data/frontend/source/images/.gitkeep +0 -0
- data/frontend/source/images/board@1x.png +0 -0
- data/frontend/source/images/city@1x.png +0 -0
- data/frontend/source/images/complete_left_panel@1x.png +0 -0
- data/frontend/source/images/icon_password@1x.png +0 -0
- data/frontend/source/images/icon_wifi@1x.png +0 -0
- data/frontend/source/images/logo@1x.png +0 -0
- data/frontend/source/images/pin_rope@1x.png +0 -0
- data/frontend/source/images/register@2x.png +0 -0
- data/frontend/source/images/sky@1x.png +0 -0
- data/frontend/source/images/sky_register@1x.png +0 -0
- data/frontend/source/images/sun@1x.png +0 -0
- data/frontend/source/images/tape_left@1x.png +0 -0
- data/frontend/source/images/tape_right@1x.png +0 -0
- data/frontend/source/images/thanks@2x.png +0 -0
- data/frontend/source/images/uploads/info.txt +1 -0
- data/frontend/source/images/visitor_art@1x.png +0 -0
- data/frontend/source/images/welcome@1x.png +0 -0
- data/frontend/source/index.html.haml +33 -0
- data/frontend/source/javascripts/all.js +161 -0
- data/frontend/source/layouts/layout.haml +23 -0
- data/frontend/source/register.html.haml +21 -0
- data/frontend/source/stylesheets/animate.css.scss +3176 -0
- data/frontend/source/stylesheets/application.css.scss +291 -0
- data/frontend/source/thanks.html.haml +8 -0
- data/kiosk/.env +7 -0
- data/kiosk/Procfile +2 -0
- data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-22037a34.woff +0 -0
- data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-66b1fc67.svg +229 -0
- data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-aafafdc0.ttf +0 -0
- data/kiosk/public/fonts/bootstrap/glyphicons-halflings-regular-f3a9a3b6.eot +0 -0
- data/kiosk/public/images/board@1x-b5fb87e5.png +0 -0
- data/kiosk/public/images/city@1x-22396032.png +0 -0
- data/kiosk/public/images/complete_left_panel@1x-7dec25da.png +0 -0
- data/kiosk/public/images/icon_password@1x-fb34b974.png +0 -0
- data/kiosk/public/images/icon_wifi@1x-e92e9c20.png +0 -0
- data/kiosk/public/images/logo@1x-927932fa.png +0 -0
- data/kiosk/public/images/pin_rope@1x-f5912856.png +0 -0
- data/kiosk/public/images/register@2x-328082c6.png +0 -0
- data/kiosk/public/images/sky@1x-47babe39.png +0 -0
- data/kiosk/public/images/sky_register@1x-cd96f779.png +0 -0
- data/kiosk/public/images/sun@1x-4f644bff.png +0 -0
- data/kiosk/public/images/tape_left@1x-9f3af6c1.png +0 -0
- data/kiosk/public/images/tape_right@1x-646752c4.png +0 -0
- data/kiosk/public/images/thanks@2x-694b424f.png +0 -0
- data/kiosk/public/images/uploads/info.txt +1 -0
- data/kiosk/public/images/visitor_art@1x-21d82dcb.png +0 -0
- data/kiosk/public/images/welcome@1x-7d17fbb9.png +0 -0
- data/kiosk/public/index.html +74 -0
- data/kiosk/public/javascripts/all-eb365891.js +12256 -0
- data/kiosk/public/register.html +52 -0
- data/kiosk/public/stylesheets/animate-31203878.css +6 -0
- data/kiosk/public/stylesheets/application-70841e1d.css +1 -0
- data/kiosk/public/thanks.html +36 -0
- data/lib/benevolent_gaze/bgapp.rb +39 -0
- data/lib/benevolent_gaze/cli.rb +153 -0
- data/lib/benevolent_gaze/kiosk.rb +164 -0
- data/lib/benevolent_gaze/kiosk_bak.rb +164 -0
- data/lib/benevolent_gaze/tracker.rb +87 -0
- data/lib/benevolent_gaze/version.rb +3 -0
- data/lib/benevolent_gaze.rb +5 -0
- data/website/.gitignore +18 -0
- data/website/Gemfile +20 -0
- data/website/Gemfile.lock +151 -0
- data/website/config.rb +58 -0
- data/website/data/site.yml +4 -0
- data/website/source/CNAME +1 -0
- data/website/source/fonts/OpenSans-Regular-webfont.eot +0 -0
- data/website/source/fonts/OpenSans-Regular-webfont.svg +1831 -0
- data/website/source/fonts/OpenSans-Regular-webfont.ttf +0 -0
- data/website/source/fonts/OpenSans-Regular-webfont.woff +0 -0
- data/website/source/fonts/Oswald-Bold.eot +0 -0
- data/website/source/fonts/Oswald-Bold.svg +0 -0
- data/website/source/fonts/Oswald-Bold.ttf +0 -0
- data/website/source/fonts/Oswald-Bold.woff +0 -0
- data/website/source/fonts/Oswald-Light.eot +0 -0
- data/website/source/fonts/Oswald-Light.svg +0 -0
- data/website/source/fonts/Oswald-Light.ttf +0 -0
- data/website/source/fonts/Oswald-Light.woff +0 -0
- data/website/source/fonts/Oswald-Regular.eot +0 -0
- data/website/source/fonts/Oswald-Regular.svg +0 -0
- data/website/source/fonts/Oswald-Regular.ttf +0 -0
- data/website/source/fonts/Oswald-Regular.woff +0 -0
- data/website/source/fonts/TradeGothic-BoldCondTwenty.eot +0 -0
- data/website/source/fonts/TradeGothic-BoldCondTwenty.svg +0 -0
- data/website/source/fonts/TradeGothic-BoldCondTwenty.ttf +0 -0
- data/website/source/fonts/TradeGothic-BoldCondTwenty.woff +0 -0
- data/website/source/fonts/TradeGothic-CondEighteen.eot +0 -0
- data/website/source/fonts/TradeGothic-CondEighteen.svg +0 -0
- data/website/source/fonts/TradeGothic-CondEighteen.ttf +0 -0
- data/website/source/fonts/TradeGothic-CondEighteen.woff +0 -0
- data/website/source/fonts/telegrafico_by_ficod-webfont.eot +0 -0
- data/website/source/fonts/telegrafico_by_ficod-webfont.svg +95 -0
- data/website/source/fonts/telegrafico_by_ficod-webfont.ttf +0 -0
- data/website/source/fonts/telegrafico_by_ficod-webfont.woff +0 -0
- data/website/source/images/.gitkeep +0 -0
- data/website/source/images/gaze.png +0 -0
- data/website/source/images/splash/accessorized_badge@2x.png +0 -0
- data/website/source/images/splash/benevolent_gaze_icon@2x.png +0 -0
- data/website/source/images/splash/benevolent_gaze_logo@2x.png +0 -0
- data/website/source/images/splash/benevolent_gaze_logo_color@2x.png +0 -0
- data/website/source/images/splash/benevolent_gaze_text@2x.png +0 -0
- data/website/source/images/splash/brackets.png +0 -0
- data/website/source/images/splash/checkmark.png +0 -0
- data/website/source/images/splash/circle_for_logo@2x.png +0 -0
- data/website/source/images/splash/cloud_cover@2x.png +0 -0
- data/website/source/images/splash/clouds.png +0 -0
- data/website/source/images/splash/complete_badge@2x.png +0 -0
- data/website/source/images/splash/down_arrow.png +0 -0
- data/website/source/images/splash/easy_badge@2x.png +0 -0
- data/website/source/images/splash/faded-clouds.png +0 -0
- data/website/source/images/splash/github_banner@2x.png +0 -0
- data/website/source/images/splash/hero_bkg.png +0 -0
- data/website/source/images/splash/left-bracket.png +0 -0
- data/website/source/images/splash/more-awesome-stuff.png +0 -0
- data/website/source/images/splash/overbracket.png +0 -0
- data/website/source/images/splash/rainbow@2x.png +0 -0
- data/website/source/images/splash/rainbow_banner@2x.png +0 -0
- data/website/source/images/splash/right-bracket.png +0 -0
- data/website/source/images/splash/seed-logo-color.png +0 -0
- data/website/source/images/splash/seed-logo.png +0 -0
- data/website/source/images/splash/sensible-defaults.png +0 -0
- data/website/source/images/splash/single_check@2x.png +0 -0
- data/website/source/images/splash/sky_background.png +0 -0
- data/website/source/images/splash/solid-gems.png +0 -0
- data/website/source/images/splash/ted.png +0 -0
- data/website/source/images/splash/ted_on_unicorn@2x.png +0 -0
- data/website/source/images/splash/view-me-on-github.png +0 -0
- data/website/source/index.html.haml +181 -0
- data/website/source/javascripts/all.js +3 -0
- data/website/source/javascripts/modernizr.js +1406 -0
- data/website/source/javascripts/scrollReveal.js +398 -0
- data/website/source/layouts/_footer.html.haml +34 -0
- data/website/source/layouts/_javascripts.erb +9 -0
- data/website/source/layouts/docs_layout.haml +23 -0
- data/website/source/layouts/layout.haml +87 -0
- data/website/source/stylesheets/animate.css +3158 -0
- data/website/source/stylesheets/application.css.scss +534 -0
- data/website/source/stylesheets/fonts/socicon-webfont.eot +0 -0
- data/website/source/stylesheets/fonts/socicon-webfont.svg +90 -0
- data/website/source/stylesheets/fonts/socicon-webfont.ttf +0 -0
- data/website/source/stylesheets/fonts/socicon-webfont.woff +0 -0
- data/website/source/stylesheets/socicons.css +124 -0
- 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 list!
|
10
|
+
%form.form-horizontal.md-3{ action: "//happyfuncorp.us8.list-manage.com/subscribe/post?u=4693df87615db712ba7e23f18&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
|
+
});
|