jekyll-theme-consulting 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +437 -0
  3. data/README.md +96 -0
  4. data/_includes/banner.html +10 -0
  5. data/_includes/bouncing.svg +53 -0
  6. data/_includes/footer.html +39 -0
  7. data/_includes/head.html +10 -0
  8. data/_includes/header.html +10 -0
  9. data/_includes/navigation.html +22 -0
  10. data/_includes/scripts.html +8 -0
  11. data/_layouts/default.html +22 -0
  12. data/_layouts/home.html +6 -0
  13. data/_layouts/page.html +4 -0
  14. data/_layouts/post.html +13 -0
  15. data/_sass/base/_reset.scss +70 -0
  16. data/_sass/base/_typography.scss +140 -0
  17. data/_sass/components/_actions.scss +18 -0
  18. data/_sass/components/_box.scss +247 -0
  19. data/_sass/components/_button.scss +65 -0
  20. data/_sass/components/_container.scss +14 -0
  21. data/_sass/components/_form.scss +88 -0
  22. data/_sass/components/_icons.scss +44 -0
  23. data/_sass/components/_image.scss +37 -0
  24. data/_sass/components/_list.scss +25 -0
  25. data/_sass/components/_menu.scss +21 -0
  26. data/_sass/components/_poptrox.scss +121 -0
  27. data/_sass/components/_row.scss +21 -0
  28. data/_sass/components/_sections.scss +18 -0
  29. data/_sass/components/_table.scss +35 -0
  30. data/_sass/layout/_banner.scss +44 -0
  31. data/_sass/layout/_breakpoints.scss +358 -0
  32. data/_sass/layout/_footer.scss +44 -0
  33. data/_sass/layout/_header.scss +85 -0
  34. data/_sass/libs/_breakpoints.scss +223 -0
  35. data/_sass/libs/_functions.scss +90 -0
  36. data/_sass/libs/_html-grid.scss +149 -0
  37. data/_sass/libs/_mixins.scss +63 -0
  38. data/_sass/libs/_vars.scss +34 -0
  39. data/_sass/libs/_vendor.scss +376 -0
  40. data/_sass/main.scss +51 -0
  41. data/_sass/noscript.scss +25 -0
  42. data/assets/css/font-awesome.min.css +4 -0
  43. data/assets/css/images/arrow.svg +17 -0
  44. data/assets/css/images/banner.svg +206 -0
  45. data/assets/css/images/circles.svg +30 -0
  46. data/assets/css/images/falling.svg +37 -0
  47. data/assets/css/images/loader.gif +0 -0
  48. data/assets/css/images/overlay.png +0 -0
  49. data/assets/css/images/poptrox-closer.svg +6 -0
  50. data/assets/css/images/poptrox-nav.svg +6 -0
  51. data/assets/css/noscript.css +19 -0
  52. data/assets/css/styles.scss +4 -0
  53. data/assets/fonts/FontAwesome.otf +0 -0
  54. data/assets/fonts/fontawesome-webfont.eot +0 -0
  55. data/assets/fonts/fontawesome-webfont.svg +2671 -0
  56. data/assets/fonts/fontawesome-webfont.ttf +0 -0
  57. data/assets/fonts/fontawesome-webfont.woff +0 -0
  58. data/assets/fonts/fontawesome-webfont.woff2 +0 -0
  59. data/assets/images/bg-1.jpg +0 -0
  60. data/assets/images/bg-alt.jpg +0 -0
  61. data/assets/images/bg.jpg +0 -0
  62. data/assets/images/bouncing.svg +50 -0
  63. data/assets/images/favicon.ico +0 -0
  64. data/assets/images/fulls/01.jpg +0 -0
  65. data/assets/images/fulls/02.jpg +0 -0
  66. data/assets/images/fulls/03.jpg +0 -0
  67. data/assets/images/fulls/04.jpg +0 -0
  68. data/assets/images/fulls/05.jpg +0 -0
  69. data/assets/images/fulls/06.jpg +0 -0
  70. data/assets/images/fulls/07.jpg +0 -0
  71. data/assets/images/fulls/08.jpg +0 -0
  72. data/assets/images/logo.svg +21 -0
  73. data/assets/images/pic01.jpg +0 -0
  74. data/assets/images/pic02.jpg +0 -0
  75. data/assets/images/screenshot.jpg +0 -0
  76. data/assets/images/thumbs/01.jpg +0 -0
  77. data/assets/images/thumbs/02.jpg +0 -0
  78. data/assets/images/thumbs/03.jpg +0 -0
  79. data/assets/images/thumbs/04.jpg +0 -0
  80. data/assets/images/thumbs/05.jpg +0 -0
  81. data/assets/images/thumbs/06.jpg +0 -0
  82. data/assets/images/thumbs/07.jpg +0 -0
  83. data/assets/images/thumbs/08.jpg +0 -0
  84. data/assets/js/breakpoints.min.js +2 -0
  85. data/assets/js/browser.min.js +2 -0
  86. data/assets/js/jquery.min.js +2 -0
  87. data/assets/js/jquery.poptrox.min.js +2 -0
  88. data/assets/js/jquery.scrolly.min.js +2 -0
  89. data/assets/js/main.js +106 -0
  90. data/assets/js/util.js +587 -0
  91. metadata +175 -0
data/assets/js/util.js ADDED
@@ -0,0 +1,587 @@
1
+ (function($) {
2
+
3
+ /**
4
+ * Generate an indented list of links from a nav. Meant for use with panel().
5
+ * @return {jQuery} jQuery object.
6
+ */
7
+ $.fn.navList = function() {
8
+
9
+ var $this = $(this);
10
+ $a = $this.find('a'),
11
+ b = [];
12
+
13
+ $a.each(function() {
14
+
15
+ var $this = $(this),
16
+ indent = Math.max(0, $this.parents('li').length - 1),
17
+ href = $this.attr('href'),
18
+ target = $this.attr('target');
19
+
20
+ b.push(
21
+ '<a ' +
22
+ 'class="link depth-' + indent + '"' +
23
+ ( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
24
+ ( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
25
+ '>' +
26
+ '<span class="indent-' + indent + '"></span>' +
27
+ $this.text() +
28
+ '</a>'
29
+ );
30
+
31
+ });
32
+
33
+ return b.join('');
34
+
35
+ };
36
+
37
+ /**
38
+ * Panel-ify an element.
39
+ * @param {object} userConfig User config.
40
+ * @return {jQuery} jQuery object.
41
+ */
42
+ $.fn.panel = function(userConfig) {
43
+
44
+ // No elements?
45
+ if (this.length == 0)
46
+ return $this;
47
+
48
+ // Multiple elements?
49
+ if (this.length > 1) {
50
+
51
+ for (var i=0; i < this.length; i++)
52
+ $(this[i]).panel(userConfig);
53
+
54
+ return $this;
55
+
56
+ }
57
+
58
+ // Vars.
59
+ var $this = $(this),
60
+ $body = $('body'),
61
+ $window = $(window),
62
+ id = $this.attr('id'),
63
+ config;
64
+
65
+ // Config.
66
+ config = $.extend({
67
+
68
+ // Delay.
69
+ delay: 0,
70
+
71
+ // Hide panel on link click.
72
+ hideOnClick: false,
73
+
74
+ // Hide panel on escape keypress.
75
+ hideOnEscape: false,
76
+
77
+ // Hide panel on swipe.
78
+ hideOnSwipe: false,
79
+
80
+ // Reset scroll position on hide.
81
+ resetScroll: false,
82
+
83
+ // Reset forms on hide.
84
+ resetForms: false,
85
+
86
+ // Side of viewport the panel will appear.
87
+ side: null,
88
+
89
+ // Target element for "class".
90
+ target: $this,
91
+
92
+ // Class to toggle.
93
+ visibleClass: 'visible'
94
+
95
+ }, userConfig);
96
+
97
+ // Expand "target" if it's not a jQuery object already.
98
+ if (typeof config.target != 'jQuery')
99
+ config.target = $(config.target);
100
+
101
+ // Panel.
102
+
103
+ // Methods.
104
+ $this._hide = function(event) {
105
+
106
+ // Already hidden? Bail.
107
+ if (!config.target.hasClass(config.visibleClass))
108
+ return;
109
+
110
+ // If an event was provided, cancel it.
111
+ if (event) {
112
+
113
+ event.preventDefault();
114
+ event.stopPropagation();
115
+
116
+ }
117
+
118
+ // Hide.
119
+ config.target.removeClass(config.visibleClass);
120
+
121
+ // Post-hide stuff.
122
+ window.setTimeout(function() {
123
+
124
+ // Reset scroll position.
125
+ if (config.resetScroll)
126
+ $this.scrollTop(0);
127
+
128
+ // Reset forms.
129
+ if (config.resetForms)
130
+ $this.find('form').each(function() {
131
+ this.reset();
132
+ });
133
+
134
+ }, config.delay);
135
+
136
+ };
137
+
138
+ // Vendor fixes.
139
+ $this
140
+ .css('-ms-overflow-style', '-ms-autohiding-scrollbar')
141
+ .css('-webkit-overflow-scrolling', 'touch');
142
+
143
+ // Hide on click.
144
+ if (config.hideOnClick) {
145
+
146
+ $this.find('a')
147
+ .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
148
+
149
+ $this
150
+ .on('click', 'a', function(event) {
151
+
152
+ var $a = $(this),
153
+ href = $a.attr('href'),
154
+ target = $a.attr('target');
155
+
156
+ if (!href || href == '#' || href == '' || href == '#' + id)
157
+ return;
158
+
159
+ // Cancel original event.
160
+ event.preventDefault();
161
+ event.stopPropagation();
162
+
163
+ // Hide panel.
164
+ $this._hide();
165
+
166
+ // Redirect to href.
167
+ window.setTimeout(function() {
168
+
169
+ if (target == '_blank')
170
+ window.open(href);
171
+ else
172
+ window.location.href = href;
173
+
174
+ }, config.delay + 10);
175
+
176
+ });
177
+
178
+ }
179
+
180
+ // Event: Touch stuff.
181
+ $this.on('touchstart', function(event) {
182
+
183
+ $this.touchPosX = event.originalEvent.touches[0].pageX;
184
+ $this.touchPosY = event.originalEvent.touches[0].pageY;
185
+
186
+ })
187
+
188
+ $this.on('touchmove', function(event) {
189
+
190
+ if ($this.touchPosX === null
191
+ || $this.touchPosY === null)
192
+ return;
193
+
194
+ var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
195
+ diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
196
+ th = $this.outerHeight(),
197
+ ts = ($this.get(0).scrollHeight - $this.scrollTop());
198
+
199
+ // Hide on swipe?
200
+ if (config.hideOnSwipe) {
201
+
202
+ var result = false,
203
+ boundary = 20,
204
+ delta = 50;
205
+
206
+ switch (config.side) {
207
+
208
+ case 'left':
209
+ result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
210
+ break;
211
+
212
+ case 'right':
213
+ result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
214
+ break;
215
+
216
+ case 'top':
217
+ result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
218
+ break;
219
+
220
+ case 'bottom':
221
+ result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
222
+ break;
223
+
224
+ default:
225
+ break;
226
+
227
+ }
228
+
229
+ if (result) {
230
+
231
+ $this.touchPosX = null;
232
+ $this.touchPosY = null;
233
+ $this._hide();
234
+
235
+ return false;
236
+
237
+ }
238
+
239
+ }
240
+
241
+ // Prevent vertical scrolling past the top or bottom.
242
+ if (($this.scrollTop() < 0 && diffY < 0)
243
+ || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
244
+
245
+ event.preventDefault();
246
+ event.stopPropagation();
247
+
248
+ }
249
+
250
+ });
251
+
252
+ // Event: Prevent certain events inside the panel from bubbling.
253
+ $this.on('click touchend touchstart touchmove', function(event) {
254
+ event.stopPropagation();
255
+ });
256
+
257
+ // Event: Hide panel if a child anchor tag pointing to its ID is clicked.
258
+ $this.on('click', 'a[href="#' + id + '"]', function(event) {
259
+
260
+ event.preventDefault();
261
+ event.stopPropagation();
262
+
263
+ config.target.removeClass(config.visibleClass);
264
+
265
+ });
266
+
267
+ // Body.
268
+
269
+ // Event: Hide panel on body click/tap.
270
+ $body.on('click touchend', function(event) {
271
+ $this._hide(event);
272
+ });
273
+
274
+ // Event: Toggle.
275
+ $body.on('click', 'a[href="#' + id + '"]', function(event) {
276
+
277
+ event.preventDefault();
278
+ event.stopPropagation();
279
+
280
+ config.target.toggleClass(config.visibleClass);
281
+
282
+ });
283
+
284
+ // Window.
285
+
286
+ // Event: Hide on ESC.
287
+ if (config.hideOnEscape)
288
+ $window.on('keydown', function(event) {
289
+
290
+ if (event.keyCode == 27)
291
+ $this._hide(event);
292
+
293
+ });
294
+
295
+ return $this;
296
+
297
+ };
298
+
299
+ /**
300
+ * Apply "placeholder" attribute polyfill to one or more forms.
301
+ * @return {jQuery} jQuery object.
302
+ */
303
+ $.fn.placeholder = function() {
304
+
305
+ // Browser natively supports placeholders? Bail.
306
+ if (typeof (document.createElement('input')).placeholder != 'undefined')
307
+ return $(this);
308
+
309
+ // No elements?
310
+ if (this.length == 0)
311
+ return $this;
312
+
313
+ // Multiple elements?
314
+ if (this.length > 1) {
315
+
316
+ for (var i=0; i < this.length; i++)
317
+ $(this[i]).placeholder();
318
+
319
+ return $this;
320
+
321
+ }
322
+
323
+ // Vars.
324
+ var $this = $(this);
325
+
326
+ // Text, TextArea.
327
+ $this.find('input[type=text],textarea')
328
+ .each(function() {
329
+
330
+ var i = $(this);
331
+
332
+ if (i.val() == ''
333
+ || i.val() == i.attr('placeholder'))
334
+ i
335
+ .addClass('polyfill-placeholder')
336
+ .val(i.attr('placeholder'));
337
+
338
+ })
339
+ .on('blur', function() {
340
+
341
+ var i = $(this);
342
+
343
+ if (i.attr('name').match(/-polyfill-field$/))
344
+ return;
345
+
346
+ if (i.val() == '')
347
+ i
348
+ .addClass('polyfill-placeholder')
349
+ .val(i.attr('placeholder'));
350
+
351
+ })
352
+ .on('focus', function() {
353
+
354
+ var i = $(this);
355
+
356
+ if (i.attr('name').match(/-polyfill-field$/))
357
+ return;
358
+
359
+ if (i.val() == i.attr('placeholder'))
360
+ i
361
+ .removeClass('polyfill-placeholder')
362
+ .val('');
363
+
364
+ });
365
+
366
+ // Password.
367
+ $this.find('input[type=password]')
368
+ .each(function() {
369
+
370
+ var i = $(this);
371
+ var x = $(
372
+ $('<div>')
373
+ .append(i.clone())
374
+ .remove()
375
+ .html()
376
+ .replace(/type="password"/i, 'type="text"')
377
+ .replace(/type=password/i, 'type=text')
378
+ );
379
+
380
+ if (i.attr('id') != '')
381
+ x.attr('id', i.attr('id') + '-polyfill-field');
382
+
383
+ if (i.attr('name') != '')
384
+ x.attr('name', i.attr('name') + '-polyfill-field');
385
+
386
+ x.addClass('polyfill-placeholder')
387
+ .val(x.attr('placeholder')).insertAfter(i);
388
+
389
+ if (i.val() == '')
390
+ i.hide();
391
+ else
392
+ x.hide();
393
+
394
+ i
395
+ .on('blur', function(event) {
396
+
397
+ event.preventDefault();
398
+
399
+ var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
400
+
401
+ if (i.val() == '') {
402
+
403
+ i.hide();
404
+ x.show();
405
+
406
+ }
407
+
408
+ });
409
+
410
+ x
411
+ .on('focus', function(event) {
412
+
413
+ event.preventDefault();
414
+
415
+ var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
416
+
417
+ x.hide();
418
+
419
+ i
420
+ .show()
421
+ .focus();
422
+
423
+ })
424
+ .on('keypress', function(event) {
425
+
426
+ event.preventDefault();
427
+ x.val('');
428
+
429
+ });
430
+
431
+ });
432
+
433
+ // Events.
434
+ $this
435
+ .on('submit', function() {
436
+
437
+ $this.find('input[type=text],input[type=password],textarea')
438
+ .each(function(event) {
439
+
440
+ var i = $(this);
441
+
442
+ if (i.attr('name').match(/-polyfill-field$/))
443
+ i.attr('name', '');
444
+
445
+ if (i.val() == i.attr('placeholder')) {
446
+
447
+ i.removeClass('polyfill-placeholder');
448
+ i.val('');
449
+
450
+ }
451
+
452
+ });
453
+
454
+ })
455
+ .on('reset', function(event) {
456
+
457
+ event.preventDefault();
458
+
459
+ $this.find('select')
460
+ .val($('option:first').val());
461
+
462
+ $this.find('input,textarea')
463
+ .each(function() {
464
+
465
+ var i = $(this),
466
+ x;
467
+
468
+ i.removeClass('polyfill-placeholder');
469
+
470
+ switch (this.type) {
471
+
472
+ case 'submit':
473
+ case 'reset':
474
+ break;
475
+
476
+ case 'password':
477
+ i.val(i.attr('defaultValue'));
478
+
479
+ x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
480
+
481
+ if (i.val() == '') {
482
+ i.hide();
483
+ x.show();
484
+ }
485
+ else {
486
+ i.show();
487
+ x.hide();
488
+ }
489
+
490
+ break;
491
+
492
+ case 'checkbox':
493
+ case 'radio':
494
+ i.attr('checked', i.attr('defaultValue'));
495
+ break;
496
+
497
+ case 'text':
498
+ case 'textarea':
499
+ i.val(i.attr('defaultValue'));
500
+
501
+ if (i.val() == '') {
502
+ i.addClass('polyfill-placeholder');
503
+ i.val(i.attr('placeholder'));
504
+ }
505
+
506
+ break;
507
+
508
+ default:
509
+ i.val(i.attr('defaultValue'));
510
+ break;
511
+
512
+ }
513
+ });
514
+
515
+ });
516
+
517
+ return $this;
518
+
519
+ };
520
+
521
+ /**
522
+ * Moves elements to/from the first positions of their respective parents.
523
+ * @param {jQuery} $elements Elements (or selector) to move.
524
+ * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
525
+ */
526
+ $.prioritize = function($elements, condition) {
527
+
528
+ var key = '__prioritize';
529
+
530
+ // Expand $elements if it's not already a jQuery object.
531
+ if (typeof $elements != 'jQuery')
532
+ $elements = $($elements);
533
+
534
+ // Step through elements.
535
+ $elements.each(function() {
536
+
537
+ var $e = $(this), $p,
538
+ $parent = $e.parent();
539
+
540
+ // No parent? Bail.
541
+ if ($parent.length == 0)
542
+ return;
543
+
544
+ // Not moved? Move it.
545
+ if (!$e.data(key)) {
546
+
547
+ // Condition is false? Bail.
548
+ if (!condition)
549
+ return;
550
+
551
+ // Get placeholder (which will serve as our point of reference for when this element needs to move back).
552
+ $p = $e.prev();
553
+
554
+ // Couldn't find anything? Means this element's already at the top, so bail.
555
+ if ($p.length == 0)
556
+ return;
557
+
558
+ // Move element to top of parent.
559
+ $e.prependTo($parent);
560
+
561
+ // Mark element as moved.
562
+ $e.data(key, $p);
563
+
564
+ }
565
+
566
+ // Moved already?
567
+ else {
568
+
569
+ // Condition is true? Bail.
570
+ if (condition)
571
+ return;
572
+
573
+ $p = $e.data(key);
574
+
575
+ // Move element back to its original location (using our placeholder).
576
+ $e.insertAfter($p);
577
+
578
+ // Unmark element as moved.
579
+ $e.removeData(key);
580
+
581
+ }
582
+
583
+ });
584
+
585
+ };
586
+
587
+ })(jQuery);